3

テスト アセンブリで NUnit コンソールを実行していますが、NUnit がクラッシュすることがあります (現在原因を突き止めています)。nunit がクラッシュすると、xml レポートが作成されず、事実上、テスト レポートがないままになります。テスト ランは非常に長く、テスト ラン レポート全体を失うと大変なことになります。NUUnit に xml ログ ファイルをそのまま (各テスト後に) 書き込むように指示する方法はありますか。それがxmlファイルが適切に閉じられないことを意味する場合でも. NUnit TestListener を使用できることはわかっています。しかし、自分で余分なコードを書くことを含まないスイッチまたは何かがありますか?

4

2 に答える 2

0

まず第一に、近い将来、そのようなロギングが NUnit によってすぐに提供されるように見えます - この機能はすでに要求されていました -最後ではなく、テストが行​​われるときに部分的な結果 XML を書き込みます

それが完了するまで、いくつかのカスタム コードを記述する必要があり、NUnit < 3.x を使用する場合は非常に単純です
。1) EventListener インターフェイスを実装するイベント リスナーを作成する必要があります
。2) このインターフェイスは、テスト実行のさまざまな状態の通知を提供します. RunStarted、RunFinished、または TestFinished。必要なのは、ケースに関連するロギングの実装だけです。私のコードからのスニペット:

 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 アドインの作成です。

[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/があります。
残念ながら、NUnit3 は大幅に書き直されたため、 NUnit < 3.xでのみ機能します。EventListener インターフェイスはもうありません。

于 2016-06-19T20:17:20.720 に答える