有没有办法告诉ReSharper在项目之前执行某组测试?我仍然希望并行执行,我不需要按每个方法控制它,只是每个类都可以。如果有所不同,测试框架就是MSTest。
我想要这样做的原因是某些测试工作在低水平并且非常快,但是其他测试工作在更高级别并且速度慢得多。我希望快速测试首先运行,因为如果它们失败了,那么我知道有什么不对,继续没有意义。但是,ReSharper目前首先运行我的慢速测试。
编辑:测试不按字母顺序运行(VS 2010上的R#7.1)。我每个类都有一个源文件。类中的测试似乎按照方法在源代码中出现的顺序运行,但我无法弄清楚R#如何确定测试类的顺序。这就是我所追求的,因为慢速和快速测试是在不同的类中。这也不是按字母顺序排列的,但从运行到运行都是一致的。
编辑2:好的,想通了(见答案)。
答案 0 :(得分:4)
这看起来像是一个黑客攻击,但我发现如果我从项目中删除带有慢速测试的文件并重新添加它们,那么它们最后运行。因此,R#似乎跟踪添加包含测试类的源文件的顺序,并按顺序运行它们。 (编辑.csproj文件以重新排序文件没有任何效果,所以它似乎没有使用它。)
答案 1 :(得分:2)
似乎测试执行按字母顺序排列.... 因此,您可以更改命名空间/类名以匹配测试订单。但我想这不适合你。
另一种选择是在“单元测试会话”窗口中将测试添加到不同的测试会话。将快速测试移至会话#1并将测试慢速移至会话#2。然后,您只运行所需的一个测试会话。
不是选项是将TestCategory添加到您的测试方法(即:[TestCategory("Fast"), TestMethod]
和[TestCategory("Slow"), TestMethod]
)并将您的测试分组到单元测试会话按类别的窗口。这对测试订单有 no 效果。
答案 2 :(得分:2)
我想这样做的原因是某些测试工作水平较低 并且非常快,但其他测试工作在更高的水平并且很多 慢。
我会建议几种方法:
将测试分成两个独立的项目。将“快速”测试放入
YourProject.Test.Unit
和
中的慢速测试 YourProject.Test.Integration
集成测试通常是与其他组件(例如网络,数据库,文件系统等)交互的测试,这可能导致测试运行速度变慢。可能是你的慢速测试正在访问外部资源(我们不知道)。
或者使用@thersch建议使用类别来标记较慢的测试。我会使用类别方法,你的测试确实都是单元测试,因此拆分它们是没有意义的。
答案 3 :(得分:1)
或者,你可以创建一个Test,它按照你想要的顺序编排对其他测试的调用 - 所以这个测试本身就是一个“会话”。
[TestMethod]
public void A_RunAllTests()
{
Test1();
Test2();
.
.
}
答案 4 :(得分:1)
右键单击解决方案资源管理器中的UnitTest项目>添加>有序测试..
您无法从Resharper获得此订购测试,但它将显示在VS Test Explorer中。将您订购的测试添加到特定的VS测试播放列表,并从您的Resharper会话/会话中删除相关的测试。
为了节省很多样板,我通常在数据库添加>中使用这种技术。得到>编辑>删除测试并使用[ClassCleanup]属性进行清理,以便在其中一个测试失败的情况下刷一下测试插入数据库。