2009-12-15 38 views
12

Tôi chỉ cần chạy một số mã nếu tôi đang chạy từ bên trong trình khởi chạy thử nghiệm TeamCity. Cách dễ nhất để phát hiện điều này là gì?Làm cách nào để phát hiện xem thử nghiệm NUnit có đang chạy trong TeamCity không?

+0

Tại sao bạn cần điều đó? –

+0

Tôi biết ai đó sẽ hỏi :) TeamCity không nắm bắt đầu ra bàn điều khiển từ FixtureSetup (http://youtrack.jetbrains.net/issue/TW-10588). Vì vậy, tôi đang viết một workaround mà sẽ nắm bắt thông điệp tường trình từ FixtureSetup và viết lại chúng trên thiết lập. Cách giải quyết này chỉ có liên quan khi chạy bên trong nhân viên TeamCity. – ripper234

+0

Ai bắt đầu FixtureSetup? (một dự án VS, TeamCity dòng lệnh) Ý tưởng của tôi là cố gắng chuyển tiếp đầu ra đến một tập tin (hoặc thực thi bổ sung). –

Trả lời

17

Kiểm tra xem biến môi trường TEAMCITY_VERSION có được xác định hay không.

Một cách tiếp cận khác là sử dụng danh mục NUnit.

Dựa trên những nhận xét bên dưới mã này sẽ có thể kiểm tra nếu thử nghiệm đang được chạy bởi TeamCity:

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

đây là mã hoạt động dựa trên ý tưởng của Eugene: private static bool IsOnTeamCity() { môi trường chuỗiVariableValue = Environment.GetEnvironmentVariable ("TEAMCITY_VERSION"); if (! String.IsNullOrEmpty (environmentVariableValue)) { trả về true; } trả về false; } –

+0

Vì vậy, đơn giản hóa điều này sẽ hoạt động (?): 'return! String.IsNullOrEmpty (Environment.GetEnvironmentVariable (" TEAMCITY_VERSION "))' Tại sao thêm 'if' trả về' true/false'anyway? – NiKiZe

1

tôi về cơ bản làm điều đó với các tài sản sau đây. Nó nhận được tên thư mục thông qua cơ sở mã của hội đồng gọi và nếu nó chứa các phần của thư mục đại lý xây dựng TeamCity của bạn, nó đang chạy trong 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"); 
    } 
} 
Các vấn đề liên quan