好吧,我们拥有的系统有很多依赖项,但我会尝试总结发生的事情而不透露太多细节。
.dll 形式的测试程序集是正在执行的程序集。很多这些测试调用 API。
在有问题的方法中,有 2 个 API 调用需要等待:一个用于将记录写入该外部接口,另一个用于提取所有记录,然后读取该外部接口中的最后一个,均通过 API。该测试只是检查在端到端上下文中写入最后一条记录是否成功,这就是为什么既有写入又有读取的原因。
如果我们在 Visual Studio 中执行测试,一切都会按预期进行。我还通过命令行 vstest.console.exe 手动对其进行了测试,并且总是会出现预期的结果。
但是,当涉及到 VSTS 中的 VS 测试任务时,由于某种原因它失败了。我们一直在试图弄清楚,最终我们达到了从“读取”部分打印列表的地步。原来我们插入的最后一条记录不在我们拉取的数据中,但是如果我们通过不同的方法检查外部接口,我们确认写入过程确实发生了。是什么赋予了?为什么 VSTest 变得像一组过时的记录?
我们还注意到两件事:
1.) 对于通过的测试,没有任何 Console.WriteLine 输出出现在日志中。只有在失败的测试中,他们才会这样做。
2.) 即使我们的 Data.Should.Be 调用在 TestMethod 的最后,日志会在打印出这些行之前报告失败!即便如此,打印应该在读取记录列表之后发生,但是当打印发生时,我们仍然缺少我们刚刚编写的记录。
有没有像我们在这里缺少的自下而上的东西?在我看来,VSTS vstest 确实在实际代码之前执行了断言。虽然 TestMethods 的顺序发生了正确的顺序(代码中从上到下编写的第 4 个测试是第 4 个而不是第 4 个到最后执行),我们需要它们以正确的顺序发生,因为后面的一些测试依赖于以前的测试成功。
我们在这里缺少什么吗?我会放一个源代码,但如果是这样的话,我需要先清理很多东西。