配置 MSTest
MSTest 又称 Microsoft Testing Framework,是适用于 .NET 应用程序的测试框架。 该测试框架允许编写和执行测试,并提供与 Visual Studio 和 Visual Studio Code 测试资源管理器、.NET CLI 和许多 CI 管道集成的测试套件。
MSTest 是一个完全受支持的开放源代码和跨平台测试框架,适用于 GitHub 上托管的所有支持的 .NET 目标(.NET Framework、.NET Core、.NET、UWP、WinUI 等)。
Runsettings
.runsettings 文件可用于配置单元测试的运行方式。 若要详细了解与平台相关的 runsettings 和配置,可以查看 VSTest runsettings 文档 或 MSTest 运行程序 runsettings 文档。
MSTest 元素
以下 runsettings 条目允许您配置 MSTest 的行为方式。
配置 | 默认 | 值 |
---|---|---|
AssemblyCleanupTimeout | 0 | 全局指定要应用于程序集清理方法的每个实例的超时。 程序集清理方法中指定的 [Timeout] 属性将替代全局超时。 |
AssemblyInitializeTimeout | 0 | 全局指定要应用于程序集初始化方法的每个实例的超时。 程序集初始化方法中指定的 [Timeout] 属性将替代全局超时。 |
AssemblyResolution | false | 查找和执行单元测试时,可以指定其他程序集路径。 例如,对与测试程序集位于不同目录中的依赖程序集使用这些路径。 若要指定路径,请使用“Directory Path”元素。 路径可以包括环境变量。<AssemblyResolution> <Directory path="D:\myfolder\bin\" includeSubDirectories="false"/> </AssemblyResolution> 仅当使用 .NET Framework 目标时才应用此功能。 |
CaptureTraceOutput | 是 | 捕获来自 Console.Write* 、Trace.Write* 和 Debug.Write* API 的文本消息,这些 API 将与当前正在运行的测试相关联。 |
ClassCleanupLifecycle | EndOfClass | 如果希望在程序集结束时进行类清理,请将此项设置为 EndOfAssembly。 (从 MSTest v4 开始不再支持,因为 EndOfClass 是默认的且唯一的 ClassCleanup 行为) |
ClassCleanupTimeout | 0 | 全局指定要应用于类清理方法的每个实例的超时。 类清理方法中指定的 [Timeout] 属性将替代全局超时。 |
ClassInitializeTimeout | 0 | 全局指定要应用于类初始化方法的每个实例的超时。 类初始化方法中指定的 [Timeout] 属性将替代全局超时。 |
ConsiderFixturesAsSpecialTests | false | 若要在 Visual Studio 和 Visual Studio Code AssemblyInitialize 和 AssemblyCleanup 日志中将 ClassInitialize 、ClassCleanup 、Test Explorer 、 显示为单独的条目,请将此值设置为 true |
DeleteDeploymentDirectoryAfterTestRunIsComplete | 是 | 若要在测试运行后保留部署目录,请将此值设置为 false。 |
DeploymentEnabled | 是 | 如果将此值设置为 false,则不会将在测试方法中指定的部署项目复制到部署目录中。 |
DeployTestSourceDependencies | 是 | 一个值,指示是否要部署测试源引用。 |
EnableBaseClassTestMethodsFromOtherAssemblies | 是 | 一个值,指示是否启用从与继承测试类不同的程序集中的基类发现测试方法。 |
ForcedLegacyMode | false | 较旧版本的 Visual Studio 对 MSTest 适配器进行了优化,使其变得更快且更具伸缩性。 某些行为(如测试的运行顺序)可能不与 Visual Studio 早期版本中的完全一致。 将此值设置为 true 可使用旧测试适配器。 例如,如果为单元测试指定 app.config 文件,可能会用到此设置。 我们建议你考虑重构测试以便可以使用较新的适配器。 |
MapInconclusiveToFailed | false | 如果测试完成返回无结论的状态,则会映射到“测试资源管理器”中的已跳过状态。 如果希望无结论的测试显示为失败,请将此值设为 true。 |
MapNotRunnableToFailed | 是 | 一个值,指示不可运行的结果是否会映射到失败的测试。 |
按类内名称排序测试 | false | 如果要在测试资源管理器和命令行中按测试名称运行测试,请将此值设置为 true。 |
Parallelize | 用于设置并行设置: 辅助角色:用于并行化的线程数/辅助角色数,默认为当前计算机上的处理器数。 范围:并行化的范围。 可以将其设置为 MethodLevel。 默认情况下,它是 ClassLevel。 <Parallelize><Workers>32</Workers><Scope>MethodLevel</Scope></Parallelize> |
|
SettingsFile | 你可以指定测试设置文件以便与此处的 MSTest 适配器配合使用。 还可以从设置菜单指定测试设置文件。 如果指定此值,则还必须将“ForcedLegacyMode”设置为“true”。 <ForcedLegacyMode>true</ForcedLegacyMode> |
|
TestCleanupTimeout | 0 | 全局指定要应用于测试清理方法的每个实例的超时。 测试清理方法中指定的 [Timeout] 属性将替代全局超时。 |
TestInitializeTimeout | 0 | 全局指定要应用于测试初始化方法的每个实例的超时。 测试初始化方法中指定的 [Timeout] 属性将替代全局超时。 |
TestTimeout | 0 | 获取指定的全局测试用例超时。 |
TreatClassAndAssemblyCleanupWarningsAsErrors | false | 若要将类清理失败视为错误,请将此值设置为 true。 |
TreatDiscoveryWarningsAsErrors | false | 若要将测试发现警告报告为错误,请将此值设置为 true。 |
TestRunParameter
元素
<TestRunParameters>
<Parameter name="webAppUrl" value="http://localhost" />
</TestRunParameters>
测试运行参数提供了一种可用于运行时测试的定义变量和值的方法。 使用 MSTest TestContext.Properties 属性访问参数:
private string _appUrl;
public TestContext TestContext { get; set; }
[TestMethod]
public void HomePageTest()
{
string _appUrl = TestContext.Properties["webAppUrl"];
}
若要使用测试运行参数,请将公共 TestContext 属性添加到测试类。
.runsettings 文件示例
以下 XML 显示典型 .runsettings 文件的内容。 复制此代码并对其进行编辑以满足需求。
文件的每个元素都是可选的,因为它有默认值。
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<!-- Parameters used by tests at run time -->
<TestRunParameters>
<Parameter name="webAppUrl" value="http://localhost" />
<Parameter name="webAppUserName" value="Admin" />
<Parameter name="webAppPassword" value="Password" />
</TestRunParameters>
<!-- MSTest -->
<MSTest>
<MapInconclusiveToFailed>True</MapInconclusiveToFailed>
<CaptureTraceOutput>false</CaptureTraceOutput>
<DeleteDeploymentDirectoryAfterTestRunIsComplete>False</DeleteDeploymentDirectoryAfterTestRunIsComplete>
<DeploymentEnabled>False</DeploymentEnabled>
<ConsiderFixturesAsSpecialTests>False</ConsiderFixturesAsSpecialTests>
<AssemblyResolution>
<Directory path="D:\myfolder\bin\" includeSubDirectories="false"/>
</AssemblyResolution>
</MSTest>
</RunSettings>
testconfig.json
使用 MSTest 运行测试时,可以使用 testconfig.json
文件来配置测试运行程序的行为。 testconfig.json
文件是一个 JSON 文件,其中包含测试运行程序的配置设置。 该文件用于配置测试运行程序和测试执行环境。 有关详细信息,请参阅 Microsoft.Testing.Platform testconfig.json 文档。
从 MSTest 3.7 开始,还可以在同一配置文件中配置 MSTest 运行。 以下部分介绍可在 testconfig.json
文件中使用的设置。
MSTest 元素
MSTest 设置按以下各节中所述的功能进行分组。
项 | 默认 | 描述 |
---|---|---|
orderTestsByNameInClass | false | 如果要在测试资源管理器和命令行中按测试名称运行测试,请将此值设置为 true。 |
enableBaseClassTestMethodsFromOtherAssemblies | 是 | 一个值,指示是否启用从与继承测试类不同的程序集中的基类发现测试方法。 |
classCleanupLifecycle | EndOfAssembly | 如果希望类清理在类结束时发生,请将其设置为 EndOfClass。 |
AssemblyResolution 设置
项 | 默认 | 描述 |
---|---|---|
路径 | 没有 | 查找和执行单元测试时,可以指定其他程序集路径。 例如,对与测试程序集位于不同目录中的依赖程序集使用这些路径。 可以在形状 { "path": "...", "includeSubDirectories": "true/false" } 中指定路径。 |
部署设置
项 | 默认 | 描述 |
---|---|---|
测试运行完成后删除部署目录 | 是 | 若要在测试运行后保留部署目录,请将此值设置为 false。 |
deployTestSourceDependencies | 是 | 指示是否要部署测试源引用。 |
enabled | 是 | 如果将此值设置为 false,则不会将在测试方法中指定的部署项目复制到部署目录中。 |
输出设置
项 | 默认 | 描述 |
---|---|---|
captureTrace | false | 捕获来自 Console.Write* 、Trace.Write* 和 Debug.Write* API 的文本消息,这些 API 将与当前正在运行的测试相关联。 |
并行度设置
项 | 默认 | 描述 |
---|---|---|
enabled | false | 启用测试并行化。 |
范围 | class | 并行化的范围。 你可以将其设置为 method 。 默认值 class 对应于按顺序运行给定类的所有测试,但并行运行多个类。 |
工人 | 0 | 要用于并行处理的线程/工作者数。 默认值映射到当前计算机上的处理器数。 |
Execution 设置
项 | 默认 | 描述 |
---|---|---|
considerEmptyDataSourceAsInconclusive | false | 设置为 true 时,空数据源被视为不确定的。 |
considerFixturesAsSpecialTests | false | 若要在 Visual Studio 和 Visual Studio Code Test Explorer 中将 AssemblyInitialize 、AssemblyCleanup 、ClassInitialize 、ClassCleanup 显示为各个单独条目,并在 .trx 日志中记录,请将此值设置为 true。 |
mapInconclusiveToFailed | false | 如果测试完成返回无结论的状态,则会映射到“测试资源管理器”中的已跳过状态。 如果希望无结论的测试显示为失败,请将此值设为 true。 |
mapNotRunnableToFailed | 是 | 一个值,指示不可运行的结果是否会映射到失败的测试。 |
treatClassAndAssemblyCleanupWarningsAsErrors | false | 若要将类清理失败视为错误,请将此值设置为 true。 |
treatDiscoveryWarningsAsErrors | false | 若要将测试发现警告报告为错误,请将此值设置为 true。 |
超时设置
项 | 默认 | 描述 |
---|---|---|
assemblyCleanup | 0 | 全局指定要应用于程序集清理方法的每个实例的超时。 |
assemblyInitialize | 0 | 全局指定要应用于程序集初始化方法的每个实例的超时。 |
classCleanup | 0 | 全局指定要应用于类清理方法的每个实例的超时。 |
classInitialize | 0 | 全局指定要应用于类初始化方法的每个实例的超时。 |
测试 | 0 | 全局指定测试超时。 |
testCleanup | 0 | 全局指定要应用于测试清理方法的每个实例的超时。 |
testInitialize | 0 | 全局指定要应用于测试初始化方法的每个实例的超时。 |
useCooperativeCancellation | false | 当设置为 true , 如果超时,MSTest 只会触发取消 CancellationToken ,但不会停止观察该方法。 此行为性能较好,但依赖于用户正确让令牌经过所有路径。 |
注意
[Timeout]
方法上指定的属性会覆盖全局超时。 例如, [Timeout(1000)]
在标有 [AssemblyCleanup] 的方法上将覆盖全局 assemblyCleanup
暂停。
示例 testconfig.json 文件
以下 JSON 显示了典型 .testconfig.json 文件的内容。 复制此代码并对其进行编辑以满足需求。
文件的每个元素都是可选的,因为它有默认值。
{
"platformOptions": {
},
"mstest": {
"execution": {
"mapInconclusiveToFailed" : true,
"disableAppDomain": true,
"considerFixturesAsSpecialTests" : false,
},
"parallelism" : {
"enabled": true,
"scope": "method",
},
"output": {
"captureTrace": false
}
}
}