如何为类中的所有测试设置测试类别

时间:2013-04-04 11:46:45

标签: c# unit-testing tfs mstest

我正在使用MSTest,我希望一次为测试类中的所有方法设置相同的测试类别,而无需单独为每个方法设置TestCategory属性。怎么办呢?

最方便和最明显的方法是在类上设置TestCategory属性,但它只能应用于方法。

最终目标是在TFS签到测试运行期间跳过集成测试。

6 个答案:

答案 0 :(得分:5)

我一直在寻找类似的东西,而且我已经找到了一个非常适合我的目的的解决方案。

解决了基于每个类应用TestCategory的问题,您可以使用/test:命令行参数{{ 1}}指定搜索字符串以匹配测试的 完全限定方法名称的任何部分。这意味着您通常可以匹配类,命名空间或您可以到达的任何匹配目标测试的搜索字符串。如果没有这样做,您可以多次使用mstest参数。即:

/test:

More Info

修改

现在可以在MSTest V2中添加类级别的> mstest /testcontainer:My.dll /test:My.FullyQualified.Namespace /test:My.FullyQualified.OtherNamespace.OtherClass 属性,如下面的NomadeNumerique的答案中所述。 Details

答案 1 :(得分:4)

  

最终目标是在TFS的测试运行期间跳过集成测试   入住。

还有其他方法可以做到这一点。在您的TFS版本中,you can set which unit tests you want to run, depending on their assembly name.

作为默认行为,它将在名称中包含“test”的程序集中运行所有单元测试。一个简单的解决方法是将集成测试重命名为不包含“test”的内容。


如果您确实想使用类别,可以尝试使用AOP。例如,使用Postsharp,您可以在集成测试程序集中创建puts the attribute on the method的方面。如果所有测试都分组在一个dll或每个集成测试类中,则为集成组件中的所有公共方法启用方面。

答案 2 :(得分:4)

为了能够在级别设置[TestCategory]属性,请使用NuGet安装“MSTest V2”TestFramework。

参考:https://blogs.msdn.microsoft.com/devops/2016/06/17/taking-the-mstest-framework-forward-with-mstest-v2/

答案 3 :(得分:2)

解决此限制的一种方法是将测试类别放在每个测试方法的开头。例如,命名单元测试

public void UnitTestDoSomething_ExpectThis()

和您的集成测试

public void IntegrationTestDoSomething_ExpectThis()

然后,当您执行TFS查询以获得集成测试时,您可以执行

Field[Automated Test Name] with Operator[Contains] and Value[IntegrationTest]

虽然这不是一个完美的解决方案,但它可以帮助您区分代码和TFS中的测试。或者,您可以查看区域和迭代路径。

答案 4 :(得分:2)

您可以分组"班级名称"进入Test Explorer面板。

使用测试TestCategory属性,您无法解决您的问题,因为C#中的属性是元数据,不能用作动态值。

答案 5 :(得分:0)

在VS 2017中,这是可能的(并且似乎是VS2012 update 1的一部分)。

您可以将[TestCategory(“ Integration”)]放在单元测试中的某个类上,并将其应用于所有测试,同样,将[TestCategory(“ Unit”)]应用于您的单元测试类。

然后,您可以使用测试资源管理器的搜索栏按特征名称=单位进行过滤,“全部运行”将仅运行与您的搜索匹配的测试。

当您在构建服务器上运行这些测试时,可以使用/ category:Unit之类的开关仅运行单元测试。