2013-01-15 3 views
3

NUnit에서 실행되는 자동 테스트 결과를 작은 데이터베이스에 기록하려고하므로 여러 가지 이유로 데이터에 쉽게 액세스하고보다 안전하게 기록 할 수 있습니다. (약 550 개의 자동화 된 테스트가 있고 그것들을 모두 실행하면 며칠이 걸릴 수 있습니다.)NUnit : TearDown()에서 실패 메시지에 액세스하기

나는 테스트의 종료 상태 (Passed/Failed/Error/Cancelled/Skipped 등)에 이미 액세스하고 있습니다. 추가 세부 사항을 기록하십시오.

TearDown()에서이 작업을 수행하려고합니다.

이것은 내가 찾을 수있는 가장 가까운 일이지만 답변으로 날을 제공하지 않았다 https://groups.google.com/forum/?fromgroups=#!msg/nunit-discuss/lXxwECvpqFc/IbKOfQlbJe8J

아이디어?

+0

저는 NUnit의 GUI (콘솔 버전이 아니라)를 통해 셀렌 테스트를 실행하고 있습니다. 테스트 자체는 setup/teardown 메소드와 전역 값을 테스트에 적용하는 기본 테스트 클래스를 상속합니다. – Izzy

답변

4

NUnit EventListeners으로 필요한 정보를 얻을 수 있다고 생각합니다. 나는 이것들을 사용하지 않았지만 당신이 성취하고자하는 것과 비슷한 것을하기 위해 그것들을 북마크했다.

다음은 함께 작업 할 인터페이스입니다. 다행히도 TearDown 메서드는 TestFinished 직전에 호출 될 것이지만이를 확인할 수는 없습니다. 일부 skellie 코드를 원하는 사람들을 위해

public interface EventListener 
{ 
    void RunStarted(string name, int testCount); 
    void RunFinished(TestResult result); 
    void RunFinished(Exception exception); 
    void TestStarted(TestName testName); 
    void TestFinished(TestResult result); 
    void SuiteStarted(TestName testName); 
    void SuiteFinished(TestResult result); 
    void UnhandledException(Exception exception); 
    void TestOutput(TestOutput testOutput); 
} 
+0

먼저 내게 이걸 보여 주셔서 고맙습니다. (+1하겠습니다. 내 담당자가 너무 낮습니다.), 심층적 인 버전은 http://www.simple-talk.com/dotnet/.net-tools/testing-times입니다. -ahead-extend-nunit/불행히도, 어떻게 제대로 구현할 수 있을지 모르겠다. 그래서 내 메서드가 호출되지만 매우 간단히 "errorMessage"속성을 업데이트 할 수있다. – Izzy

+0

답변을 주셔서 감사합니다. http://stackoverflow.com/questions/6664271/nunit-extension. 이 인터페이스를 함께 구현하고 TestStarted와 TestFinished를 사용하는 클래스를 내 필요에 맞게 채우십시오. 이들은 SetUp 직전과 TearDown 직후에 호출되므로 추가 로깅을 해당 클래스에서 수행해야합니다. – Izzy

1

:

[NUnitAddinAttribute(Type = ExtensionType.Core, 
Name = "Database Addin", 
Description = "Writes test results to the database")] 
public class MyExtension :IAddin, EventListener 
{ 
//some private attributes to hold important data 

//you must provide the Install method 
    public bool Install(IExtensionHost host) 
    { 
     //I also built my connection string in here 
     IExtensionPoint listeners = host.GetExtensionPoint("EventListeners"); 
     if (listeners == null) 
      return false; 

     listeners.Install(this); 
     return true; 
    } 

//you must also provide all the event handlers, 
//but they don't have to actually do anything if they are not used. 
//e.g. 

    public void TestStarted(NUnit.Core.TestName testName) 
    { 
     //This saved the start time of the test 
     _start = DateTime.Now; 
    } 

    public void TestFinished(NUnit.Core.TestResult result) 
    { 
     //LogTest connected to the databse and executed a proc to 
     //insert the log, was quite simple 
     LogTest((result.Message == null? "" : result.Message), 
      result.ResultState, 
      result.Name, 
      _start, 
      DateTime.Now); 
    } 

    public void TestOutput(NUnit.Core.TestOutput testOutput) 
    { 
     //this is one of the unused event handlers, it remains empty. 
    } 
    //etc.. 

} 
1

NUnit과 3.0TestContext.CurrentContext의 내부에 포함 된 이러한 세부 사항이 있습니다 ~

주의 :.을 경우에는 VS 테스트 어댑터가 확장으로 포함 된 경우 이벤트 핸들러를 사용하면 테스트가 두 번 실행됩니다. 확장을 위해 한 번, 이벤트 처리기를 구현하는 데 필요한 DLL을 한 번.