VSTS 测试失败但 vstest.console 通过;由于某种原因,断言在代码之前执行?

VSTS Test fails but vstest.console passes; the assert executes before the code for some reason?

嗯,我们的系统有很多依赖项,但我会尽量总结正在发生的事情,而不会泄露太多细节。

正在执行的是 .dll 形式的测试程序集。许多这些测试调用 API.

在有问题的方法中,有 2 个 API 调用等待它们:一个将记录写入该外部接口,另一个提取所有记录,然后读取该外部接口中的最后一个记录界面,均通过 API。测试只是在端到端的上下文中检查写入最后一条记录是否成功,这就是为什么既有写入又有读取的原因。

如果我们在 Visual Studio 中执行测试,一切都会按预期进行。我还通过命令行手动测试了它vstest.console.exe,并且总是出现预期的结果。

但是,当涉及到 VSTS 中的 VS 测试任务时,由于某种原因它失败了。我们一直在努力弄清楚,最终我们达到了从 'read' 部分打印列表的地步。原来我们最后插入的记录不在我们拉取的数据中,但是如果我们通过不同的方法查看外部接口,我们确认确实发生了写入过程。是什么赋予了?为什么 VSTest 变得像一组过时的记录?

我们还注意到两件事:

1.) 对于通过的测试,Console.WriteLine 输出中的 none 出现在日志中。只有在测试失败时他们才会这样做。

2.) 即使我们的 Data.Should.Be 调用是在 TestMethod 的最后,日志在打印出行之前报告失败! 甚至然后,打印应该在 读取记录列表后发生,但是当打印确实发生时,我们仍然缺少我们刚刚写入的记录。

我们是否缺少从下到上的东西?在我看来,VSTS vstest 确实在实际代码之前执行断言。尽管 TestMethods 的顺序是正确的(代码中从上到下编写的第 4 个测试是第 4 个而不是第 4 个到最后执行),我们需要它们以正确的顺序发生,因为后面的一些测试取决于以前的测试成功。

我们在这里遗漏了什么吗?我会放一个源代码,但如果是这样的话,我需要先清理一些东西。

原来我们完全误解了 'await' 的作用。我们正在使用 .Wait() 代替罪魁祸首,并且还将返回通过其他测试来检查质量。