在 Visual Studio 中处理单元测试时,可以编译对测试进行分组的播放列表。例如,当开发一个新功能时,我们只想运行相关测试而不是所有现有测试,这很有用。
但是,在我看来,播放列表只能通过显式添加/删除单元测试来“手动”维护。
总比没有好,但如果我能根据某些标准(例如功能、测试持续时间等)“标记”我的单元测试并动态生成播放列表,那就太好了。
有什么方法可以使用默认测试框架在 Visual Studio 中执行类似的操作吗?
Visual Studio 2019 的更新 16.7.0 添加了创建动态定义的播放列表的功能。
根据这些注释,播放列表用户界面现在包含各种选择标准的复选框。底层 XML 似乎是一系列
<Rule>
元素。
要访问新的用户界面,可能需要单击测试资源管理器工具栏中的新铅笔图标(工具提示:编辑),并确认播放列表可能已更新为新格式。
来源:
您还可以通过直接编辑播放列表 xml 文件来使用特征来定义动态组。
截至2020年12月7日,我终于开始工作了。为了实现运行包含 MSTest 属性
[TestCategory("SchemaUpdateBasic")]
的任何测试的目标,可能与 [TestCategory("...")]
的其他实例一起运行
<Playlist Version="2.0">
<Rule Name="Includes" Match="Any">
<Property Name="Trait" Value="SchemaUpdateBasic" />
</Rule>
</Playlist>
从 Visual Studio 版本 16.8.2 开始,这可以按预期工作。对我来说,之前的版本导致测试资源管理器窗口中出现正确的测试集,但单击“全部运行”会在测试输出中产生此结果
---------- Starting test discovery for requested test run ---------- Test run will use DLL(s) built for framework
...
========== Test discovery finished: 0 Tests found in 2.6 sec ========== No tests found to run.
此外 https://github.com/MicrosoftDocs/visualstudio-docs/issues/6012 作为文档增强请求而存在。
在 VS2017 中,您可以按命名空间、类、持续时间、结果、特征或项目对测试进行分组。可能以前就在那里,但我现在无法检查第一手资料。
为此,请在“测试资源管理器”窗口中单击第二个图标,然后单击您想要的任何选项。默认情况下,它们按结果分组。
如果您想使用 Traits,请将
Trait
名称/值属性添加到您的各个测试用例中:
[Trait("Foo", "Value1")]
[Trait("Foo", "Value2")]
[Trait("Bar", "Value")]
public void MyClass_MyMethod_WhenThing_Outcome()
{
// ...
}