在复杂的VS2008解决方案中,我有三个单元测试项目。当它们在相同的测试数据库上运行时,重要的是一个接一个地执行测试项目。首先,哪个项目在另一个项目开始之前完成并不重要。
如果我想要全部执行它们,有几种方法可以做到这一点,这会导致不同的结果:
所以问题是,在使用第三种方法时,是什么决定了单元测试序列?有没有办法在.testrunconfig中指定默认测试列表?
由于存在变通方法,因此问题根本不重要。但欢迎任何想法。 感谢。
答案 0 :(得分:8)
您正在体验名为交互式测试的单元测试气味,在优秀xUnit Test Patterns中有所描述。更具体地说,您遇到了共享夹具,这是另一种说法,即您的几个测试使用相同的共享数据库,并且它们依赖于先前测试运行的结果。
这是一种反模式,应该不惜一切代价避免。该书为如何处理这种情况提供了广泛的指导。
我开始描述这个的原因是,这就是MSTest不保证测试顺序的原因。虽然订单看似(半)确定性,但您不能依赖它。其他一些单元测试框架(xUnit.NET可以想到)甚至可以在每次运行测试套件时以随机顺序运行测试。 MSTest并不是那么极端,但你无法订购单元测试。
也就是说,如果您正在运行Visual Studio Team Suite或(我相信)Team Test,那么有一种称为 Ordered Test 的测试。您可以使用它来指定所有测试(包括单元测试)应按特定顺序执行。