2012-03-02 2 views
0

これは私にとっては奇妙なことですが、それは明らかですが、知っているセレンを使用するときは...私は今までセレンを使用していません。オブジェクトへの参照を失うサブクラスがそのオブジェクトを使用しようとするとき

しかし、ここでは基本的なコードしか書かれていませんが、構文/ OOPの問題だと思います。

public Abstract BaseTest 
{ 
    protected IWebTestDriver TestDriver {get; set;} 

    ...more code 

    protected void WaitForGridToRender(double seconds) 
    { 
     TestDriver.Wait(TimeSpan.FromSeconds(seconds)); 
    } 
} 

が、私はその後、BaseTestを継承したテストクラスと呼ばれるMyTests.csを持っている:

は、私は、ドライバのプロパティと、私は後に起こって問題を得ているメソッドを持つ基本クラスを考えてみましょうこれらを持っているよりも

[TestFixture] 
public class MyTests : BaseTest 
{ 
     [Test] 
     public void SomeTab_WhenClicked_ShowsSomething() 
     { 
      SomeLandingPage someLandingPage = new SomeLandingPage(TestDriver); 

      mainLandingPage.NavigateToTheMainPage(); 

      ... rest of code 
     } 

     .. other test methods 
} 

そして、私はいくつかのもので(もっとDRY)を取得し、私はちょうどページ上の特定の要素を再利用することを可能にする「のPageObject」としての役割を果たす第三級を持っていますし、その中にNUnitのテスト同じ一般的な方法を私のテスト方法を通して繰り返す:

public class MyPageObject : BaseWebTest 
{ 
     public void NavigateToTheMainPage() 
     { 
      // wait for the user to log in 
      WaitForGridToRender(5); 
     } 
} 

は今ここに私の問題がどこにあるかだとどのように物事が呼び出されている:

1)基本クラスが最初に初期化されています... TestDriverのインスタンスがそのようにTestDriverプロパティに作成され、設定されていることを意味します

2)私がここで言及しなかった別のクラスのいくつかのコードは、FireFoxを開くための呼び出しを送信する基本クラスから呼び出されます。何もしません...ここでは特別なものはありません

3)最終的にコントロールは私のテストメソッドに行き、最終的にはSomeTab_WhenClicked_ShowsSomething()メソッドにヒットし、MyPageObject.NavigateToTheMainPage()メソッドを呼び出します。

NavigateToTheMainPage()は、WaitForGridToRenderというBaseTestメソッドを呼び出しようとしますが、コントロールは最終的にそこに行きます。

は、今の問題はBaseTest.TestDriverインスタンスがありまして、私のテストクラスと私のPageObjectクラスの両方にアクセスしていることを、アップ WaitForGridToRenderがMyPageObject 内から呼び出されたときまで、です。

しかし、私は最終的にWaitForGridToRenderにこの行にデバッグおよびget:何らかの理由で今

TestDriver.Wait(seconds); 

、私はTestDriverにヌル参照を取得...そのプロパティの参照インスタンスが消えました!

なぜ私がこの理由を投稿しているのかわからない理由は、これがどうして起こるのかがわかりません。

答えて

2

1)基本クラスは最初に初期化されます。私たちは、サブクラス

でそれを使用することができますので、このコードは

protected IWebTestDriver TestDriver {get; set;} 

TestDriverのインスタンスがTestDriverプロパティに作成され、設定されていることを意味するTestDriver名前付きの型IWebTestDriverの保護されたプロパティを宣言します。

TestDriverをここには示されていないコンストラクタまたはメソッドに設定していない限り、TestDriverのバッキング変数にはnull参照が含まれています。

関連する問題