使用MSTest单独运行单元测试和集成测试

时间:2011-11-09 16:17:00

标签: visual-studio-2010 unit-testing integration-testing mstest

我们使用Visual Studio 2010 Ultimate和MSTest编写的测试。我们的单元测试和集成测试*都是用MSTest编写的。

**根据我们的定义,集成测试是一个MSTest TestMethod,需要一段时间才能运行和/或调用外部组件,如数据库或Web服务。*

我正在寻找一种轻松过滤集成测试的方法,以便只运行单元测试而不运行所有集成测试。

到目前为止我的想法:

  1. 使用[Ignore]属性标记集成测试。当你想要运行集成测试时,这很有效,但是真的很痛苦。

  2. 为不同的测试类型分配[TestCategory]属性。这允许它们单独运行,但只能通过“测试视图”面板运行。您不能使用CTRL + R,A(在解决方案中运行所有测试)或其他类似的快捷方式/热键。

  3. 集成测试是在一个单独的项目中,是否可以采取措施阻止它们在项目级别运行?只要它易于切换。

  4. 将集成测试写入不同的测试框架,例如: NUnit的。这将使它们与工具的观点完全分开。

  5. 有没有人有任何其他建议?是否有任何插件可以帮助解决这个问题?

3 个答案:

答案 0 :(得分:6)

我建议为集成测试使用不同的项目(或项目),因为根据您的跑步者,在所有跑步者中运行或不运行测试的唯一真正方法是包括或不包括测试类库。

但是,如果您正在使用MSTest,我还建议您使用TestCategoryAttribute来标记非单元测试。然后,您可以“过滤”测试以使用MSTest在测试视图中运行。

像Resharper和显然是TestDriven.net(http://bit.ly/tmtYC2)这样的跑步者可以让你从一般的单位测试执行过滤出那些测试。

答案 1 :(得分:5)

如果您的单元测试项目位于单独的命名空间中,则可以使用键盘快捷键CTRL+R, T在当前上下文中运行所有测试(即namespace MyApp.Tests.Unit)。为此,将光标放在任何单元测试类的namespace子句中的左大括号之后。

答案 2 :(得分:2)

我有一个建议,但你不会喜欢它。

完全放弃MSTest,而其他单元测试框架一直在发展,MSTest几乎停止了。是的,它具有直接与VS集成的一个主要好处,但如果我没有错,那将在VS 2011中改变,这将为自定义单元测试运行器集成提供原生支持。

(注意:时间停止部分可能不正确,因为我承认没有太多关注MSTest,因为我在VS 2008中谨慎使用它)

我使用NUnit并通过使用不同的类库项目将我的单元测试与集成测试分开。然后,我使用Gallio命令行运行器自动运行测试,允许我为运行单元和集成测试配置单独的脚本。

最后,除了个人意见之外,我不确定,但TestDriven.net插件可能只支持运行特定类别的测试,所以你可以检查一下。