【问题标题】:How to run some tests only in azure devops CI env but not locally如何仅在 azure devops CI env 中而不是在本地运行一些测试
【发布时间】:2019-10-28 19:20:11
【问题描述】:

我想指定一些长时间运行的 c# 项目 xUnit 测试仅在 azure devops CI 管道中运行,而不是在本地 (vs2019) 中单击 Visual Studio 中的“全部运行”时运行。这种行为是否有“最佳实践”?

我尝试制作一个测试播放列表并在本地运行它而不是 Run All,但这需要在每次添加新测试时更新列表(或列表),这很容易出错。

【问题讨论】:

  • 这个问题怎么样?你从亚历克斯的回答中解决了吗?
  • Leo:我最终得到了 Ruben 的解决方案,如果在环境中未设置 TF_BUILD,则创建一个自定义的 FactAttribute 类来设置 Skip 属性。 DRY,不会对资源管理器隐藏测试,并且清晰地表达意图。
  • 如果你想为 NUnit 而不是 xUnit 解决这个问题,请看这里:stackoverflow.com/questions/62388204/…

标签: c# azure-devops xunit.net


【解决方案1】:

AzureDevOps 定义了一些environment variables。我会将TF_BUILD 与 Ruben Bartelinks 的答案结合使用。

如果脚本正在由构建任务运行,则设置为 True。

此变量是代理范围的。它可以用作脚本中的环境变量和构建任务中的参数,但不能用作构建号的一部分或版本控制标记。

【讨论】:

  • 这很好用。使用 Environment.GetEnvironmentVariable("TF_BUILD") 获取值并将其与“True”进行比较确实将执行环境与 Azure DevOps 管道和其他管道分开。
【解决方案2】:

FactAttribute 中的 Skip 属性是可覆盖的 - 您可以创建一个 FactWhenAttribute 并让它检查环境变量

this post from @Joseph Woodward 中的示例

public sealed class IgnoreOnAppVeyorLinuxFact : FactAttribute
{
    public IgnoreOnAppVeyorLinuxFact() {
        if(RuntimeInformation.IsOSPlatform(OSPlatform.Linux) && IsAppVeyor()) {
            Skip = "Ignore on Linux when run via AppVeyor";
        }
    }

    private static bool IsAppVeyor()
        => Environment.GetEnvironmentVariable("APPVEYOR") != null;
}

【讨论】:

  • 啊,这与塞巴斯蒂安的回答相结合将是一个干净的解决方案!
【解决方案3】:

假设您的构建管道是使用Release 构建配置而不是使用Debug 构建配置构建的,您可以在[Fact] 属性周围使用#IF !DEBUG 预处理器指令。

例如:

#if !DEBUG
[Fact]
#endif
public void YourTestMethod()
{
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-26
    • 2019-09-10
    • 2016-01-01
    • 1970-01-01
    • 2020-08-06
    相关资源
    最近更新 更多