我有代码库,其中单元测试使用机器规范编写,利用基于nuget的测试运行器Machine.Specifications.Runner.VisualStudio,v2.10来执行测试。它在Visual Studio(2015& 2017)的上下文中工作正常,并且Trait过滤按预期工作。但是,在使用测试程序集构建步骤时,它似乎不遵守类别筛选器。与visual studio相比,TFS构建代理如何运行测试适配器有什么特别之处吗?
示例测试
[Subject(typeof(RetrieveConfiguration))]
[Tags(Categories.Manual)]
public class When_hitting_the_general_services_uri : SpecificationContext
{
private static TestResult result;
Establish context = () =>
{
IServiceInfo serviceInfo = Substitute.For<IServiceInfo>();
serviceInfo.Url = "";
environment.GetService("Confiugration", "Retrieve").Returns(serviceInfo);
x509Manager.LoadFromSignature(ValidSignature).Returns(LoadFromMachine(ValidSignature));
};
Because of = () => error = Catch.Exception(() => result = sut.Execute(new Uri("https://myproductionuri/retrieve"), environment));
It should_have_the_succeeded = () => result.Result.ShouldEqual(StepResult.Success);
}
构建日志
...
2017-08-10T20:49:44.8717852Z ##[debug]Calling Invoke-VSTest for all test assemblies
2017-08-10T20:49:44.9655216Z Working folder: E:\B39\BA78\WS\18
2017-08-10T20:49:44.9655216Z Executing C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe "E:\B39\BA78\WS\18\s\Src\Test\Verifier.Reporting.Azure.Storage.Spec\bin\Release\Verifier.Reporting.Azure.Store.Spec.dll" /TestCaseFilter:"TestCategory=ContinuousIntegration" /EnableCodeCoverage /logger:trx /TestAdapterPath:"E:\B39\BA78\WS\18\s"
2017-08-10T20:49:45.1999042Z Microsoft (R) Test Execution Command Line Tool Version 14.0.25420.1
2017-08-10T20:49:45.1999042Z Copyright (c) Microsoft Corporation. All rights reserved.
2017-08-10T20:49:45.5592884Z Starting test execution, please wait...
2017-08-10T20:49:56.8721150Z Information: Machine Specifications Visual Studio Test Adapter - Executing tests in E:\B39\BA78\WS\18\s\Src\Test\Verifier.Reporting.Azure.Storage.Spec\bin\Release\Verifier.Reporting.Azure.Store.Spec.dll
2017-08-10T20:50:01.5285749Z Passed Verifier.Reporting.Azure.Store.Spec.When_publishing_a_report.should_have_succeeded
...
更新8/25 - 添加了所需的屏幕截图和反馈
请注意,总共有16个测试,表示以开头的是集成测试,预计不会在构建代理的上下文中运行。
测试总数从16减少到14.由于测试没有请求的标记,因此从测试运行中删除了。
至于在visual studio之外运行测试,似乎测试运行器在我的开发机器上加载测试适配器时遇到问题,而适配器在Visual Studio和构建代理上运行良好。
答案 0 :(得分:0)
vstest任务只是使用vstest.console.exe
来执行测试。 TFS VStest任务中的测试筛选条件与vstest.console.exe
的控制台选项 / TestCaseFilter 的工作方式相同。
"TestCategory=ContinuousIntegration"
上面,我没有在你的代码中看到这样的TestCategory名称,如果我们使用命令行(vstest.console.exe)运行测试,我们必须指定匹配的名称,意味着至少我们在测试方法代码上面命名一个TestCategory属性 即,我的测试方法代码:
[TestCategory("nine"), TestMethod()]
public void TestMethod1()
{
Assert.AreEqual(1, 1);
}
我需要在命令行中使用以下代码来运行它:
Vstest.console.exe UnitTestvstsada.dll /TestCaseFilter:TestCategory=nine
它将成功过滤测试,并在TFS构建中获得相同的结果。
对于测试资源管理器中的过滤器,没有此选项可用于过滤测试。只有配置连续集成,实际上不是过滤器。如果您不介意,请详细说明您是如何使用过滤器特性的:通过visual studio测试运行中的ContinuousIntegration。
害怕使用过滤器特性:ContinuousIntegration与TFS2015构建代理中的TestCategory=ContinuousIntegration
不等。