2016-12-31 7 views
0

NUnitフレームワーク(最近は完璧なTestNGとJavaから移行)でしばらくの間苦労しました。私は一つのことを達成しようとしています:コードを一度だけのすべての私のテストを実行する前に初期化し、コードの別の部分を初期化するたびにテストが始まります。最初のタスクでは、私は[OneTimeSetUp]属性を使用していて、2番目のタスクは[SetUp]です。すべてが完璧に動作するはずですが、実行時に私の[SetUp]メソッドはオブジェクトへのNullReferenceExceptionのために失敗します。これは[OneTimeSetUp]属性メソッドで作成されていると考えられます。興味深いことに、デバッグモードでは、ブレークポイントがなくてもうまくいっています。テストは正常に開始されます。 、テストが失敗した私は、コードのIJavaScriptExecutor jse = ((IJavaScriptExecutor)driver)行を呼び出すたびNUnit v 3.5とVisual Studio Enterprise 2015 v 4.6.01055ユニットテストは実行中に失敗しますが、デバッグモードでは成功します。

[SetUp] 
public void taskBeforeEachTests() 
{ 
      IJavaScriptExecutor jse = ((IJavaScriptExecutor)driver); 
      jse.ExecuteScript("window.open();"); 
} 

だから問題は次のとおりです。その後、私は開かれたChromeブラウザで新しいタブを開きたい

[OneTimeSetUp] 
public void taskBeforeAllTests() 
     { 
      IWebDriver driver = new ChromeDriver("PathToChromeExecutable"); 
      driver.navigate().GoToURL("http://www.google.com"); 
     }  

:以下の私のコードスニペットをご覧ください。ドライバオブジェクトでNullReferenceException。 VSのエキスパートと私が前にこのような状況に直面した人に私の質問。 VS設定/オプションで設定する必要はありますか?私の見ているところでは、私のコードはデバッグモードでは正常に動作するので、Visual Studio自体で調整が必要な場合があります。ありがとう!

答えて

1

「完璧」についてはわかりませんが、一度のセットアップですぐに範囲外になるローカル変数「ドライバ」が初期化されます。あなたの設定は、おそらく初期化されていない別の "ドライバ"、おそらくメンバ変数を使用しています。

+0

デバッグモードでは "ローカル変数"が表示され、実行時にはそれを認識できません。 – President

+0

さらにコードを書くのは難しいですが、あなたのワンタイム設定の "ドライバ"はセットアップのものと同じではないことは間違いありません - あなたが投稿したコードが実行しているコードと同一である。 – Charlie

+0

論理的に考えると、はい、あなたは正しいです。これは単に、OneTimeSetUpのドライバオブジェクトがSetUpで同じではないことを意味します。しかし、最初の問題は、デバッグモードが最初のオブジェクトをどのように見て、それをさらにコードを実行するために使用するのかです。デバッグコードの実行とVisual Studio IDEでの実行の違いを調べる必要があるかもしれません。 – President

関連する問題