2013-04-04 160 views
39

我使用的是MSTest,我希望为测试类中的所有方法一次设置相同的测试类别,而无需单独为每个方法设置TestCategory属性。如何才能做到这一点?如何为类中的所有测试设置测试类别

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

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

+3

有趣。不要认为有可能在类中使用TFS测试标记所有方法。 TFS理解TestCategory和Priority,这些属性只是方法特定的。您可以将集成测试移至独立的项目,并指示TFS不运行它。 – nikita 2013-04-05 12:34:29

+2

你可以将你的单元和集成测试分成两个不同的程序集,然后相应地配置你的构建? – 2013-04-05 14:35:46

+0

好吧,我们有几十个库,每个库都有一个相应的测试库,可能包含单元测试和集成测试。将它们中的每一个拆分为单元库和集成测试库是可能的,但看起来并不像最优雅的方法。 – alex 2013-04-05 16:33:36

回答

2

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

public void UnitTestDoSomething_ExpectThis() 

和你的集成测试

public void IntegrationTestDoSomething_ExpectThis() 

然后,当你做你的TFS查询来获取集成测试,你可以做

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

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

+0

但你如何处理多个类别? – Dagrooms 2017-05-17 20:06:16

2

您可以按“类名称”分组到Test Explorer面板。

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

4

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

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

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


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

5

我一直在寻找类似的东西,而且我已经找到了一个解决方案,可以很好地满足我的需求。

这并不解决在每个阶级基础应用TestCategory,的问题,但可以使用/test:命令行参数mstest指定搜索字符串相匹配的充分的任何部分合格方法名称的测试。这意味着您通常可以匹配类或名称空间,或者您可以到达的任何搜索字符串,以匹配目标测试。如果不这样做,您可以多次使用/test:参数。即:

> mstest /testcontainer:My.dll /test:My.FullyQualified.Namespace 
    /test:My.FullyQualified.OtherNamespace.OtherClass 

More Info

相关问题