ReSharper执行单元测试的控制顺序

时间:2012-11-26 02:55:51

标签: unit-testing resharper

有没有办法告诉ReSharper在项目之前执行某组测试?我仍然希望并行执行,我不需要按每个方法控制它,只是每个类都可以。如果有所不同,测试框架就是MSTest。

我想要这样做的原因是某些测试工作在低水平并且非常快,但是其他测试工作在更高级别并且速度慢得多。我希望快速测试首先运行,因为如果它们失败了,那么我知道有什么不对,继续没有意义。但是,ReSharper目前首先运行我的慢速测试。

编辑:测试不按字母顺序运行(VS 2010上的R#7.1)。我每个类都有一个源文件。类中的测试似乎按照方法在源代码中出现的顺序运行,但我无法弄清楚R#如何确定测试类的顺序。这就是我所追求的,因为慢速和快速测试是在不同的类中。这也不是按字母顺序排列的,但从运行到运行都是一致的。

编辑2:好的,想通了(见答案)。

5 个答案:

答案 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]属性进行清理,以便在其中一个测试失败的情况下刷一下测试插入数据库。