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
  • FullyQualifiedName
  • Name
  • ClassName
  • Priority
  • TestCategory
Xunit
  • FullyQualifiedName
  • DisplayName
  • Traits

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]