Visual Studio 2012 测试类别层次结构(测试资源管理器)

7
我正在测试一个很大的项目(C#,VS2012),我需要将我的单元测试按测试层次进行排序(例如:现在我有43个测试用例)。我确实需要这个层次结构。
我已经定义了测试类别,并且测试资源管理器通过特性显示测试用例。我已经按照以下方式排列了测试类别(一个测试可以有几个类别):
  • TestCase01: 主要测试类型,子测试类型,子子测试类型
  • ...
  • TestCase10: 主要测试类型,子测试类型,子子测试类型
  • TestCase11: 主要测试类型,子测试类型2,子子测试类型2
  • ...
  • TestCase15: 主要测试类型,子测试类型2,子子测试类型2
如下所示定义:
    [TestMethod]
    [TestCategory("MainTestType")]
    [TestCategory("SubTestType")]
    [TestCategory("SubsubTestType")]
    public void MyTestCase()
    { /* etc. */

但是测试资源管理器显示如下:
  • MainTestType: 具有MainTestType类别的所有测试
  • SubTestType: 具有SubTestType类别的所有测试
  • 等等...

所以我真的错过了层次结构。 我已经尝试了“Cat1 \ Cat2 \ Cat3”甚至使用/。 但没有显示层次结构。 您知道如何做到这一点,或者有一个可以为我完成此操作的免费插件吗?

我还需要这些类型的分类,因为我们经常从命令行运行测试,mstest.exe可以运行一个类别的测试(例如所有MainTestType或SubTestType)。 (我坚持使用mstest,因为团队中的一半人使用vs2010)。 但对于vs2012来说,解决方案已足够。

提前感谢您。


1
你尝试使用了来自VS Update 2的播放列表吗? 我不知道对你来说维护这些播放列表有多容易,但如果这真的能帮助到你,那就试试吧。 - outcoldman
我知道播放列表,但我正在寻找分层分类(可能是一个插件)。但也许这是不可能的,我只是好奇。 - lajos.cseppento
我以前没有看到过这个。你可以尝试使用R#,看看R#单元测试资源管理器是否能够做到,但我不认为它能够。 - outcoldman
大约两周前在试用版中尝试过,但我找不到该选项。另一个问题是R#不是免费的,并且覆盖了许多好的VS功能。 - lajos.cseppento
Cseppento,你能做出你的分层测试解决方案吗? - alerya
不过请注意,这个问题已经超过2年了,现在可能有其他解决方案。 - lajos.cseppento
4个回答

6

由于目前不支持我搜索的内容,我做了下一个解决办法:

  • 构建项目
  • 运行MSText以进行所有测试 -> .trx输出
  • 简单的winforms / wpf程序,解析.trx获取测试用例并在树形视图中显示它们
  • 现在我们可以从此应用程序运行mstest以选择节点 -> 创建.trx输出(可在VS中打开)

我使用.trx是因为这样我不必解析程序集,mstest.exe会自动解析。测试类别是这样创建的:

[TestCategory("MainTestType")]
[TestCategory("MainTestType/SubTestType")]
[TestCategory("MainTestType/SubTestType/SubsubTestType")]

所以,这是一个简单的解决方法,只需要一个二进制文件,开发人员也可以使用。播放列表的问题在于它们不是分层的。

3
你能分享一下你的工具,比如在 GitHub 上吗? - Michael Freidgeim

1

测试资源管理器仅显示遵循TestFilter/InnerTests布局的组。

新的测试资源管理器选项卡是一个通用容器。使用特定的适配器/插件,您可以将其他测试框架(NUnit、xUnit、Qunit等)集成到测试资源管理器中...但这些适配器必须遵循测试资源管理器界面。

因此,它不是测试资源管理器选项卡本身所支持的,我以前没有找到扩展测试资源管理器选项卡的方法。

也许另一个测试框架将允许您拥有层次结构,但这将在另一个自定义选项卡中,并使用另一个属性(TestCategory是MSTest属性)。

只是为了提供信息,您还可以通过以下方式在测试资源管理器窗口中组合特性

Trait:"MainTestType1"  Trait:"SubTestType3"

我知道这个,我正在寻找分层组织(可视化) - lajos.cseppento
正如我所说,原生的测试资源管理器标签页中没有可扩展性点。它只支持分组和过滤功能。 - Cybermaxs
无法关闭答案,只能删除。一个“可接受的答案”并不一定意味着解决了问题。 - Cybermaxs

1

在VS2010中进行分组可使用可以在“测试列表编辑器”中打开的.vsmdi文件。

至于VS2012:

Visual Studio 2012 Update 1 http://www.microsoft.com/visualstudio/eng/visual-studio-update 添加了增强功能,支持按项目和特征(类别)进行分组和过滤。如何使用这些功能详见此博客文章:http://blogs.msdn.com/b/visualstudioalm/archive/2012/11/09/how-to-manage-unit-tests-in-visual-studio-2012-update-1-part-1-using-traits-in-the-unit-test-explorer.aspx

按类进行分组和过滤已完成,并将在Update 2中提供。

建议您将类别移动到命名空间,以便在TestView窗口中的FullClassName列中看到平面层次结构。


我知道这个,我正在寻找分层组织(可视化) - lajos.cseppento

0

你可以通过将第二级特性的值与第一级特性的值连接起来,稍微作弊一下。所以,如果第一级是动物,第二级是哺乳动物,你可以有一个特性是"动物.哺乳动物"。在测试资源管理器中,你会得到一个节点 Level1 [动物],另一个节点 Level1 [植物],然后还有一个节点Level2 [动物.老虎]。我相信过滤器支持子字符串匹配,这是一种排序方式。不过你仍旧没有树形视图(尽管如果你非常坚决的话,可以尝试使用像旧版DOS tree命令一样的扩展ASCII艺术管道字符)。

另外,你仍然面临一个问题,即不能合并不同的特性(使得所有的鸟都能在整个列表中放在一起)。

另一方面,要在允许n元组特性的同时强制实施层次结构可能会很麻烦。它必须限制项目不能从层次结构的顶端走多个路径,检测和报告循环,使用一个树形控件覆盖(或与之矩阵化)现有的内容。而且,当你重构代码并希望测试也保持平行排列时,太多现有结构可能会引起麻烦。


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