如何检测 NUnit 测试是否正在 TeamCity 内运行?

发布于 2024-08-15 02:41:05 字数 58 浏览 4 评论 0原文

仅当我从 TeamCity 测试启动器中运行时,我才需要运行一些代码。检测到这一点的最简单方法是什么?

I need to run some code only if I'm running from within the TeamCity test launcher. What's the easiest way to detect this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

蓝眼泪 2024-08-22 02:41:05

检查是否定义了 TEAMCITY_VERSION 环境变量。

另一种方法是使用 NUnit 类别。

根据下面的注释,此代码应该能够检查 teamcity 是否正在运行测试:

private static bool IsOnTeamCity() 
{ 
    string environmentVariableValue = Environment.GetEnvironmentVariable("TEAMCITY_VERSION"); 
    if (!string.IsNullOrEmpty(environmentVariableValue)) 
    { 
         return true; 
    } 
    return false; 
} 

Check if TEAMCITY_VERSION environment variable is defined.

Another approach is to use NUnit categories.

Based on the comment below this code should be able to check if the test is being run by teamcity:

private static bool IsOnTeamCity() 
{ 
    string environmentVariableValue = Environment.GetEnvironmentVariable("TEAMCITY_VERSION"); 
    if (!string.IsNullOrEmpty(environmentVariableValue)) 
    { 
         return true; 
    } 
    return false; 
} 
若有似无的小暗淡 2024-08-22 02:41:05

我基本上是用以下属性来做到这一点的。它通过调用程序集的代码库获取目录名称,如果它包含 TeamCity 构建代理目录的一部分,则它在 TeamCity 中运行。

public static bool IsTeamCity
{
    get
    {
        // the Assembly.GetExecutingAssembly().Location property gives funny results when using 
        // NUnit (where assemblies run from a temporary folder), so the use of CodeBase is preferred.
        string codeBase = Assembly.GetCallingAssembly().CodeBase;
        string assemblyFullPath = Uri.UnescapeDataString(new UriBuilder(codeBase).Path);
        string assemblyDirectory = Path.GetDirectoryName(assemblyFullPath);

        // a full TeamCity build directory would be e.g. 'D:\TeamCity\buildAgent\work\de796548775cea8e\build\Compile'
        return assemblyDirectory.ToLowerInvariant().Contains("buildagent\\work");
    }
}

I'm basically doing that with the following property. It get's the directory name via code base of the calling assembly and if it contains parts of your TeamCity build agent directory it is running within TeamCity.

public static bool IsTeamCity
{
    get
    {
        // the Assembly.GetExecutingAssembly().Location property gives funny results when using 
        // NUnit (where assemblies run from a temporary folder), so the use of CodeBase is preferred.
        string codeBase = Assembly.GetCallingAssembly().CodeBase;
        string assemblyFullPath = Uri.UnescapeDataString(new UriBuilder(codeBase).Path);
        string assemblyDirectory = Path.GetDirectoryName(assemblyFullPath);

        // a full TeamCity build directory would be e.g. 'D:\TeamCity\buildAgent\work\de796548775cea8e\build\Compile'
        return assemblyDirectory.ToLowerInvariant().Contains("buildagent\\work");
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文