2014-02-27 2 views
3

테스트 어셈블리에서 NUnit 콘솔을 실행하지만 때때로 NUnit가 충돌합니다 (현재 이유를 파악 중입니다). nunit가 충돌 할 때 xml 보고서가 작성되지 않고 효과적으로 테스트 보고서없이 남았습니다. 테스트 실행은 매우 길며 전체 테스트 실행 보고서를 잃어 버리면 안좋은 상황입니다. NUMit에게 (각 테스트 후에) XML 로그 파일을 쓰도록 지시하는 방법이 있습니까? 이 경우에도 xml 파일이 제대로 닫히지 않습니다. NUnit TestListener를 사용할 수 있다는 것을 알고 있습니다. 그러나 거기에 여분의 코드를 직접 작성하는 것을 포함하지 않는 스위치가 있습니다.각 테스트 후 테스트 실행 중 NUnit 콘솔 보고서 테스트 결과가 있습니다.

답변

3

명령 줄 스위치를 사용하여 nunit-console을 호출 할 수 있습니다. 이렇게하면 출력에 테스트 결과가 포함되지 않더라도 각 테스트의 (정규화 된) 이름이 실행될 때 콘솔에 출력됩니다. 그러나 성공적으로 실행 된 테스트가 표시됩니다.

유일하게 다른 옵션은 사용자가 직접 구현 한 EventListener을 작성한 것입니다. The documentation about that interface은 약간 가벼운 편이지만, the NUnit documentation about writing an NUnit add-in assembly으로 시작하면 충분히 이해할 수 있습니다.

0

우선 가까운 장래에 그러한 로깅이 즉시 NUnit에 의해 제공 될 것입니다.이 기능은 이미 요청되었습니다 - Write partial results XML as tests happen instead of at the end.

는 우리가 일부 사용자 지정 코드를 작성해야하고 경우에 u는 NUnit과 <는 아주 간단를 3.x를 사용 할 때까지
1) 당신의 EventListener 인터페이스를
2를 구현하는 이벤트 리스너를 작성해야합니다)이 인터페이스는 다양한 테스트 실행 상태에 대한 알림을 제공합니다. RunStarted, RunFinished 또는 TestFinished입니다. 당신이 필요로하는 것은 당신의 사건과 관련된 로깅의 구현입니다. 내 코드에서 니펫

[NUnitAddin] 
public class ProgressReporterNugetAddin : IAddin 
{ 
    public bool Install(IExtensionHost host) 
    { 
     var listeners = host.GetExtensionPoint("EventListeners"); 
     listeners.Install(new ProgressReporterEventListener()); 
     return true; 
    } 
} 

참고 : 유사한 접근 등을 다루고 꽤 좋은 기사 http://jimmykeen.net/2015/02/28/logging-test-results-with-nunit/가있다

public void RunStarted(string name, int testCount) 
{ 
    try 
    { 
     _instanceId = Environment.GetEnvironmentVariable("InstanceId"); 
     _buildId = Environment.GetEnvironmentVariable("BuildId"); 
     _browser = Environment.GetEnvironmentVariable("BrowserToTest"); 
     _template = Environment.GetEnvironmentVariable("TemplateToTest"); 
    } 
    catch { } 
} 

public void TestFinished(TestResult result) 
{ 
    if (result.ResultState == ResultState.Ignored) 
    { 
     return; 
    } 
    var r = new TestingWorkerData 
    { 
     BuildId = _buildId, 
     InstanceId = _instanceId, 
     TestName = result.FullName, 
     Success = result.IsSuccess, 
     TimeTaken = result.Time.ToString(CultureInfo.InvariantCulture), 
     Message = result.Message, 
     StackTrace = result.StackTrace, 
     Browser = _browser, 
     Template = _template 
    };   
    File.AppendAllLines(@"z:\\results.txt", new[] {JsonConvert.SerializeObject(r)}); 
} 

public class TestingWorkerData 
{ 
    public string TestName { get; set; } 
    public bool Success { get; set; } 
    public string TimeTaken { get; set; } 
    public string Message { get; set; } 
    public string StackTrace { get; set; } 
    public string InstanceId { get; set; } 
    public string Browser { get; set; } 
    public string Template { get; set; } 
    public string BuildId { get; set; } 
} 

3) 마지막 것은 NUnit과 추가 기능의 창조이다.
유감스럽게도 NUnit3이 많이 다시 작성 되었기 때문에 NUnit < 3.x ONLY과 같이 작동합니다. 더 이상 EventListener 인터페이스가 없습니다.