dotnet test
命令用于执行项目中的单元测试。单元测试项目由两部分组成:单元测试框架以及它的运行程序(Test Runner)。常用的单元测试框架由:MSTest,NUnit 和 xUnit。
单元测试必须指定 Test Runner,可以在项目文件中使用 <PackageReference>
属性指定。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
<PackageReference Include="xunit" Version="2.2.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.2.0" />
</ItemGroup>
</Project>
更多关于测试的内容,请参阅 11.1 节。
参数
PROJECT
单元测试的项目,可以是项目文件的路径也可以是目录,默认为当前目录。
// 运行当前目录中项目的单元测试
dotnet test
// 运行指定项目的单元测试
dotnet test ~/cxlt/test/test1.csproj
选项
-h|--help
打印帮助信息。
-a|--test-adapter-path <PATH_TO_ADAPTER>
在测试运行中使用来自指定路径的自定义测试适配器。
-c|--configuration {Debug|Release}
指定生成配置。默认值为 Debug,但项目的配置可以重写默认配置。
--collect <DATA_COLLECTOR_FRIENDLY_NAME>
为 Test Runner 启用数据收集器。
-d|--diag <PATH_TO_DIAGNOSTICS_FILE>
为测试平台启用诊断模式并将诊断信息写入指定的文件。
-f|--framework <FRAMEWORK>
运行测试使用的目标框架。
在项目文件中定义多个目标框架时,可以通过 --framework
选项为特定的目标框架运行测试,如果没有指定,会针对定义的所有目标框架运行测试。例如在项目文件中定义了如下目标框架。
<PropertyGroup>
<TargetFrameworks>net461;netcoreapp1.0;netcoreapp1.1;netcoreapp2.0</TargetFrameworks>
</PropertyGroup>
看下面的示例。
// 针对 .netcoreapp2.0 运行测试
dotnet test -f netcoreapp2.0
// 针对所有定义的目标框架运行测试
dotnet test
--filter <EXPRESSION>
运行与给定表达式匹配的测试。
<EXPRESSION>
的格式为:<property><operator><value>[|&<EXPRESSION>]
<property>
是测试用例的属性。下面表格中是主流测试框架支持的属性。
测试框架 | 支持的属性 |
---|---|
MSTest |
|
Xunit |
|
operator
是 property 和 value 的关系。
运算符 | 功能 |
---|---|
= |
完全匹配 |
!= |
非完全匹配 |
~ |
包含 |
value
是字符串,并且区分大小写。
不含 <operator>
的表达式默认为 FullyQualifiedName 包含。例如,dotnet test --filter xyz
与 dotnet test --filter FullyQualifiedName~xyz
相同。
多个表达式可以结合条件运算符一起使用。
运算符 | 函数 |
---|---|
| |
或 |
& |
与 |
使用条件运算符时,可以用括号将表达式括起来。例如,(NameTestMethod1) | (NameTestMethod2)。
更多关于单元测试筛选的内容,请参阅 https://github.com/dotnet/docs.zh-cn/blob/master/docs/core/testing/selective-unit-tests.md 。
-l|--logger <LoggerUri/FriendlyName>
指定测试结果的记录器。
--no-build
运行测试之前不生成项目。
--no-restore
运行命令时不进行隐式还原。
-o|--output <OUTPUT_DIRECTORY>
要运行测试的二进制文件目录。该目录既是 dotnet build
命令输出的目录,也是 dotnet test
测试文件的输入目录。
下面是运行测试的两种方式,第二种方式是第一种的分解。
// 运行测试
dotnet test -o ~/cxlt/test
// 生成测试项目,输出到指定目录
dotnet build -o ~/cxlt/test
// 不生成测试项目,运行测试,从指定目录查找测试文件
dotnet test -o ~/cxlt/test --no-build
-r|--results-directory <PATH_TO_RESULTS_DIRECTORY>
放置测试结果的目录。如果目录不存在,会自动创建。
--results-directory
选项要和 --logger
一起使用。测试结果文件默认存储在项目文件所在目录的 TestResults 目录中。
// 将测试结果文件存储到指定目录
dotnet test --logger "trx;verbosity=normal" --results-directory ~/cxlt/TestResults
-s|--setting <SETTINGS_FILE>
运行测试时使用的设置。
-t|--list-tests
列举出当前项目中发现的测试。
-v|--verbosity <EVEL>
设置命令的详细级别。允许的值有 q[uiet]
、m[inimal]
、n[ormal]
、d[etailed]
和diag[nostic]
。