2016-07-18 10 views
0

私はSelenium Webdriverに簡単な拡張ライブラリを作成しています。私は次のようにイベントのデリゲートを定義する私の「ラッパー」クラスWebDriverManager持っている:私のターゲットプロジェクトでC#カスタムイベントが発生しない

public delegate void OnStartEventHandler(); 
    public delegate void OnTerminateEventHandler(); 
    public delegate void OnCheckpointEventHandler(); 

    public event OnStartEventHandler OnStartTesting; 
    public event OnTerminateEventHandler OnTerminateTesting; 
    public event OnCheckpointEventHandler OnCheckpointTesting; 

    /// <summary> 
    /// Method that should be fired inside method with [OneTimeSetUp] attribute 
    /// </summary> 
    public void OnStart() { if (OnStartTesting != null) OnStartTesting(); } 

    /// <summary> 
    /// Method that should be fired inside method with [OneTimeTearDown] attribute 
    /// </summary> 
    public void OnTerminate() { if (OnTerminateTesting != null) OnTerminateTesting(); } 

    /// <summary> 
    /// Method that should be fired inside method with either [SetUp] or [TearDown] attribute 
    /// </summary> 
    public void OnCheckpoint() { if (OnCheckpointTesting != null) OnCheckpointTesting(); } 

を私はWebDriverManagerクラスを含むライブラリへの参照を追加し、簡単な方法で記述します。

[OneTimeSetUp] 
    public void SetUp() 
    { 
     // wdmChrome and wdmFirefox are instances of WebDriverManager 
     wdmChrome.OnStartTesting +=() => { Console.WriteLine("Starting testing Chrome browser"); }; 
     wdmFirefox.OnStartTesting +=() => { Console.WriteLine("Starting testing Firefox browser"); }; 

     wdmChrome.OnTerminateTesting +=() => { Console.WriteLine("Terminating test of Chrome browser"); }; 
     wdmFirefox.OnTerminateTesting +=() => { Console.WriteLine("Terminating test of Firefox browser"); }; 

     wdmChrome.OnStart(); 
     wdmFirefox.OnStart(); 
     // other stuff that initializes webdriver 
    } 

    [OneTimeTearDown] 
    public void TearDown() 
    { 
     wdmChrome.OnTerminate(); 
     wdmFirefox.OnTerminate(); 
     wdmChrome.WebDriver.Close(); 
     wdmFirefox.WebDriver.Close(); 
    } 

テスト正しく発射されてパスしますが、「出力」には代理人からのメッセージはありません。私はまたOnStart()のボディーをOnStartTesting?.Invoke()に変更しようとしましたが、結果は変わりませんでした。どうしたの?

+0

可能性のある複製http://stackoverflow.com/questions/4884043/how-to-write-to-console-out-during-execution-of-an-mstest-test –

+0

また、Visual StudioのアドバイスOnStartTesting?.Invoke()を使用して、イベント登録と呼び出しの競合状態を回避します。 –

+0

あなたの答えをありがとう。残念ながら、Andras Zoltanによって提案された答えはうまくいかなかった。 –

答えて

1

試験の目的は、イベントが、その後、クビことを確認する場合:

  1. Seprateあなたのテストでは、個別に各Eventをチェックします。
  2. 初期化メソッドでイベントに登録しないでください。
  3. 初期化メソッドでイベントをトリガするコードを呼び出さないでください。
  4. イベントに登録して、専用のテストメソッド内でイベントを発生させるコードをトリガする必要があります。
  5. あなたがChromeOnStartTestingFirefoxためOnTerminateTestingためOnStartTestingOnTerminateTestingテストを持っていますので、テストmthodsを切り抜いするためにそれらをseprate、ChromeFirefoxの両方を使用してコードをテストする必要がある場合。
  6. テストのためにConsole.WriteLine()に依存しないでください。テストメソッド内にフラグを作成してから、匿名デリゲートによって設定されたフラグを特定のイベントのイベントハンドラに設定し、その値にAssertを設定してみてください。

希望します。

関連する問題