本文介绍使用 dotnet test
命令进行单元测试的时候,过滤出被测项目中的一部分测试出来,仅测试这一部分。
背景
建一个 .NET Core 的单元测试项目,例如项目名字是 Walterlv.Demo.Tests。举例其中的一个测试类如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Walterlv.Demo.Tests
{
[TestClass]
public class FooTest
{
[TestCategory("CategoryA")]
[Priority(1)]
[TestMethod]
public void TestMethod1()
{
}
[Priority(2)]
[TestMethod]
public void TestMethod2()
{
}
}
}
使用 Visual Studio 的话,直接在测试资源管理器中点击运行全部测试,或者选择想要测试的项点运行所选测试即可。
而使用 GUI 工具的话不利于 CI 集成和自动化测试,所以必然需要用到命令:
1
> dotnet test .\Walterlv.Demo.Tests.dll
有时为了调试方便或输出分类数据等,要求执行一部分单元测试,这就需要过滤了。dotnet test
的过滤使用 --filter
选项。
过滤
方法名
查找方法名包含某字符串的单元测试并执行:
1
dotnet test --filter TestMethod1
或者:
1
dotnet test --filter Name~TestMethod1
如果是排除某方法,则是:
1
dotnet test --filter FullyQualifiedName!=Walterlv.Demo.Tests.FooTest.TestMethod1
类名
查找类名等于某字符串的单元测试并执行:
1
dotnet test --filter ClassName=Walterlv.Demo.Tests.FooTest
类名必须包含命名空间,否则找不到。
分类与优先级
查找标记了 [TestCategory("CategoryA")]
的方法并执行单元测试:
1
dotnet test --filter TestCategory=CategoryA
查找标记了 [Priority(2)]
的方法并执行单元测试:
1
dotnet test --filter Priority=2
条件与或
条件或(|
):
1
dotnet test --filter Name~TestMethod1|TestCategory=CategoryA
条件与(’&’):
1
dotnet test --filter Name~TestMethod1&TestCategory=CategoryA
参考资料
本文会经常更新,请阅读原文: https://blog.walterlv.com/post/dotnet-test-with-filter.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 ([email protected]) 。