10

有没有办法告诉 ReSharper 在其他人之前在项目中执行某组测试?我仍然想要并行执行,我不需要按方法控制它,只需按类即可。测试框架是 MSTest 如果这有所作为。

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

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

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

4

5 回答 5

4

这看起来有点像 hack,但我发现如果我从项目中删除带有慢速测试的文件并重新添加它们,它们就会最后运行。因此,R# 似乎会跟踪包含测试类的源文件的添加顺序并按该顺序运行它们。(编辑 .csproj 文件以重新排序文件没有效果,所以它似乎没有使用它。)

于 2012-11-27T04:10:01.530 回答
2

我想这样做的原因是一些测试在低级别工作并且非常快,但其他测试在更高级别工作并且速度要慢得多。

我建议几种方法:

将测试拆分为两个单独的项目。将“快速”测试放入

YourProject.Test.Unit

和缓慢的测试

YourProject.Test.Integration

集成测试通常是与其他组件(例如网络、数据库、文件系统等)交互的测试,这可能导致测试运行速度变慢。可能是您较慢的测试正在访问外部资源(我们不知道)。

或者使用@thersch 的使用类别来标记较慢测试的建议。我会使用 category 方法,因为您的测试实际上都是单元测试,因此拆分它们是没有意义的。

于 2012-11-26T10:21:37.253 回答
2

似乎测试执行是按字母顺序排列的......所以你可以改变你的命名空间/类名来匹配测试顺序。但我想这不是你的选择。

另一种选择是在“单元测试会话”窗口中将测试添加到不同的测试会话。将快速测试移至会话 #1,将慢速测试移至会话 #2。然后你只运行你需要的一个测试会话。

不是一个选项是将 TestCategory 添加到您的测试方法(即:[TestCategory("Fast"), TestMethod][TestCategory("Slow"), TestMethod])并在Unit Test Sessions窗口中按Categories对您的测试进行分组。这对测试顺序没有影响。

于 2012-11-26T10:01:22.473 回答
1

或者,您可以创建一个测试,它按照您想要的顺序编排对其他测试的调用 - 因此该测试本身充当“会话”。

[TestMethod]
public void A_RunAllTests()
{
    Test1();
    Test2();
    .
    .

}
于 2015-03-18T09:34:07.733 回答
1

在解决方案资源管理器中右键单击您的 UnitTest 项目 > 添加 > 有序测试..

您无法从 Resharper 访问此有序测试,但它会显示在 VS 测试资源管理器中。将您订购的测试添加到特定的 VS 测试播放列表,并从您的 Resharper 会话/会话中删除涉及的测试。

为了节省大量样板文件,我通常将这种技术与数据库添加 > 获取 > 编辑 > 删除测试一起使用,并使用带有 [ClassCleanup] 属性的清理方法来扫描测试插入的数据库,以防其中一个测试失败。

于 2015-08-26T06:06:13.580 回答