在构建服务器上运行时跳过单元测试



我们有一些UI集成测试不能在构建服务器上运行,因为启动测试GUI应用程序需要以用户身份运行构建代理(而不是当前设置的服务)。

这会导致构建管道卡住。所以我想在本地运行这些测试,而不是在构建服务器上。

是否有一种方法来实现这使用xUnitMSTestsAzure DevOps构建管道?

你当然可以。

设置一个环境变量,以指示它是否在构建中的构建服务器上运行。yml文件

variables:
- name: IsRunningOnBuildServer
value: true

答案1:使用xUnit

现在创建一个自定义事实属性来使用它:

// This is taken from this SO answer: https://stackoverflow.com/a/4421941/8644294
public class IgnoreOnBuildServerFactAttribute : FactAttribute
{
public IgnoreOnBuildServerFactAttribute()
{
if (IsRunningOnBuildServer())
{
Skip = "This integration test is skipped running in the build server as it involves launching an UI which requires build agents to be run as non-service. Run it locally!";
}
}
/// <summary>
/// Determine if the test is running on build server
/// </summary>
/// <returns>True if being executed in Build server, false otherwise.</returns>
public static bool IsRunningOnBuildServer()
{
return bool.TryParse(Environment.GetEnvironmentVariable("IsRunningOnBuildServer"), out var buildServerFlag) ? buildServerFlag : false;
}
}

现在在您想要跳过在构建服务器上运行的测试方法上使用这个FactAttribute。如:

[IgnoreOnBuildServerFact]
public async Task Can_Identify_Some_Behavior_Async()
{
// Your test code...
}

答案2:使用MSTests

创建一个自定义测试方法属性来覆盖Execute方法:

public class SkipTestOnBuildServerAttribute : TestMethodAttribute
{
public override TestResult[] Execute(ITestMethod testMethod)
{
if (!IsRunningOnBuildServer())
{
return base.Execute(testMethod);
}
else
{
return new TestResult[] { new TestResult { Outcome = UnitTestOutcome.Inconclusive } };
}
}
public static bool IsRunningOnBuildServer()
{
return bool.TryParse(Environment.GetEnvironmentVariable("IsRunningOnBuildServer"), out var buildServerFlag) ? buildServerFlag : false;
}
}

现在在您想要跳过在构建服务器上运行的测试方法上使用此TestMethodAttribute。如:

[SkipTestOnBuildServer]
public async Task Can_Identify_Some_Behavior_Async()
{
// Your test code...
}

可以根据名称空间等过滤掉测试

dotnet test --filter FullyQualifiedName!~IntegrationTests

这将运行所有不包含" integrationtests"的测试。

您可以在这里阅读更多关于测试过滤的信息:https://learn.microsoft.com/en-us/dotnet/core/testing/selective-unit-tests

相关内容

  • 没有找到相关文章

最新更新