3

NUnit で実行された自動テストの結果を小さなデータベースに記録して、データに簡単にアクセスし、さまざまな理由でより安全に記録できるようにしようとしています。(約 550 の自動テストがあり、すべてを実行するには数日かかる場合があります)

テストの終了ステータス (合格/失敗/エラー/キャンセル/スキップなど) には既にアクセスできますが、追加の詳細をログに記録したいと思います。

TearDown() 内でこれを実行しようとしています。

これは私が見つけた最も近いものですが、答えはありませんでした: https://groups.google.com/forum/?fromgroups=#!msg/nunit-discuss/lXxwECvpqFc/IbKOfQlbJe8J

アイデア?

4

3 に答える 3

4

NUnit EventListenersで必要な情報を取得できると思います。私はこれらを自分で使用したことはありませんが、あなたが達成しようとしていることと同様のことをするためにブックマークを付けました.

使用するインターフェイスは次のとおりです。TearDownメソッドが の直前に呼び出されることを願っていますTestFinishedが、これを確認することはできません。

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);
}
于 2013-01-15T19:37:12.053 に答える
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..

}
于 2013-01-17T09:41:00.567 に答える
1

NUnit 3.0では、これらの詳細がTestContext.CurrentContext 内に含まれています。~

注意: 拡張機能として VS テスト アダプターが含まれている場合、イベント ハンドラーを使用すると、テストが 2 回実行されます。1 回は拡張機能用、もう 1 回はイベント ハンドラーの実装に必要なインクルード dll 用です。

于 2016-02-15T17:46:39.557 に答える