MSTest - 隐藏一些单元测试案例以避免被构建服务器执行

26

我有三个单元测试无法在构建服务器上通过,因为它们依赖运行测试的用户的登录凭据。

是否有任何方法(属性???)可以隐藏这三个测试并运行所有其他测试?

我们的构建服务器专家告诉我,生成一个排除这些测试的vsmdi文件就可以解决问题,但我不确定如何操作。

我知道我可以将这三个测试放入一个新项目中,并让我们的构建服务器管理员明确排除它,但我真的很想能够只是在这些有问题的测试上使用一个简单的属性。

7个回答

35

你可以为测试添加一个类别标签,然后根据标签运行测试。

[TestCategory("RequiresLoginCredentials")]
public void TestMethod() { ... }

当你运行 mstest 时,你可以指定 /category:"!RequiresLoginCredentials"


这也是我在NUnit中的做法。 - Mike Two
2
完美的答案。只有一件小事:你确定它不是TestCategory,而不是Category吗? - Adam Rackis
David,如果你感兴趣的话,这是一个相关的后续问题:http://stackoverflow.com/questions/6061282/specify-mstest-parameters-in-msbuild - Adam Rackis

3

3

其他答案已经过时。

在现代的Visual Studio(2012及以上版本),测试是使用vstest而不是mstest运行的。

新的命令行参数是/TestCaseFilter:"TestCategory!=Nightly",如文章中所述。


2

打开测试->Windows->测试列表编辑器。

在那里,您可以包含/隐藏测试。


1
我偏好的方法是在我的解决方案中有两种测试项目:一种是单元测试,可以从任何上下文中执行并且应该始终通过;另一种是集成测试,需要特定的上下文才能正确运行(用户凭据、数据库、Web服务等)。我的测试项目使用命名约定(例如:businessLogic.UnitTests vs businessLogic.IntegrationTests),并配置我的构建服务器仅运行单元测试(*.UnitTests)。这样,如果我想运行集成测试,我就不必注释 IgnoreAttributes,而且我发现这比编辑测试列表更容易。

1
我发现如何在VS 2012的构建定义中按类别过滤测试。我在其他地方找不到这个信息。
在“自动化测试”下的“测试源”选项卡中的“测试用例筛选器”字段中,在处理选项卡中,您需要编写TestCategory = MyTestCategory(任何地方都不需要引号)。
然后在测试源文件中,您需要添加TestCategory属性。我看到了一些方法可以做到这一点,但适用于我的是将其添加到与TestMethod相同的属性中,如下所示。
[TestCategory(“MyTestCategory”),TestMethod()]
这里您需要引号。

1
当我从VS构建定义中运行单元测试(这不完全是MSTest)时,在自动化测试属性的条件选项卡中,我会指定:
TestCategory!=MyTestCategory

所有分类为MyTestCategory的测试都被跳过了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接