0

好吧,我们拥有的系统有很多依赖项,但我会尝试总结发生的事情而不透露太多细节。

.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 个到最后执行),我们需要它们以正确的顺序发生,因为后面的一些测试依赖于以前的测试成功。

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

4

1 回答 1

0

事实证明,我们严重误解了“等待”的作用。我们正在使用 .Wait() 代替罪魁祸首,并且还将返回通过其他测试来检查质量。

于 2018-07-11T07:27:04.887 回答