运行单元测试

时间:2012-08-29 06:17:35

标签: unit-testing visual-studio-2012

在我们的解决方案中,我们有几个测试项目。它们中的大多数都包含运行速度快的单元测试,但有些是集成,验收和UI测试,需要相当长的时间才能完成。 现在我想有一个方便的方法来运行单元测试。通过使用热键运行全部或使用新功能在每次构建后运行测试。

不幸的是,VS也会运行所有慢速测试。在VS10中,我将测试按项目分组在测试视图中,并仅选择包含单元测试的测试。它并不像我希望的那样容易,但至少它是可能的。现在似乎没有办法在解决方案中运行所有测试。

我目前看到的唯一替代方法是从解决方案中删除除单元测试之外的所有测试,但这会限制重构功能。

那么有谁知道如何在新的VS中轻松分组和运行单元测试?

5 个答案:

答案 0 :(得分:9)

在Visual Studio 2012 Update 1 CTP中,测试资源管理器已添加了按项目或特征(类别)对测试进行分组的选项。

请转到此链接查看新内容there

答案 1 :(得分:8)

您可以在单位文本浏览器中使用搜索过滤器。

enter image description here

在2012年附带的新Test Explorer中,您可以通过“测试结果”,“FileName”等对测试进行分组,但在RTM构建组中/通过“TestCategory”搜索不存在于测试资源管理器中。但是,在VS2012中,命令行和TeamBuild中有一个基于TestCategory的过滤器(使用TestCaseFilter在VS 2012 RC中运行选择性单元测试)。

来自VS开发团队的成员,他们了解这个缺失功能​​的重要性。它在积压中,它应该在furutre构建/更新中可用。

以下博客提供了更多详细信息:http://blogs.msdn.com/b/vikramagrawal/archive/2012/07/23/running-selective-unit-tests-in-vs-2012-rc-using-testcasefilter.aspx

答案 2 :(得分:3)

从Visual Studio 2012 Update 2(目前在CTP上)开始,我们现在可以使用“播放列表”或基于“列表和类”运行单元测试的子集。更多信息请访问:http://blogs.msdn.com/b/visualstudioalm/archive/2013/01/30/first-ctp-for-visual-studio-update-2.aspx#playlists

原始答案:

AFAIK,VS2012中的新单元测试框架“支持通过TestCaseFilter基于过滤条件的选择性执行”。不幸的是,目前不支持通过用户界面执行此操作,但它位于产品组的待办事项中。您可以通过Test Build或命令行使用此方法。请参阅以下博客:http://blogs.msdn.com/b/vikramagrawal/archive/2012/07/23/running-selective-unit-tests-in-vs-2012-rc-using-testcasefilter.aspx

编辑:按照MSDN文档使用测试类别对测试进行分组。

http://msdn.microsoft.com/en-us/library/dd286595.aspx

另请参阅此问题:How to exclude certain tests in the Visual Studio 2012 Test Runner?

它显示了基于测试路径的过滤示例。

答案 3 :(得分:2)

我建议使用TestDriven.Net。将所有单元测试项目分组到一个解决方案文件夹中,将所有其他测试分组然后右键单击“单元测试”文件夹并选择“运行所有测试”。我总是喜欢这个VS原生测试工具的优秀测试运行员。

另一种方法是使用NCrunch - 它在您编写代码时在后台运行所有测试。它很好地处理集成测试,因为它们在后台并行运行,所以它不会阻止你(你也选择运行哪些测试项目)。虽然有一个问题 - 我相信它还不支持VS2012,但可能很快就会支持。

答案 4 :(得分:1)

我也错过了这个功能...(我们做了同样的事情:按项目分组或有时按命名空间分组)。但我发现我可以使用测试资源管理器搜索功能以某种方式解决这个问题:

https://msmvps.com/blogs/deborahk/archive/2012/09/16/searching-and-grouping-in-vs-2012-test-explorer.aspx

在我的情况下,我可以使用FullName上的搜索过滤器识别我需要运行的特定测试(使用搜索框上的下拉列表,或键入FullName:“UnitTest”)

它不一样,但它对我有用