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