2016-06-20 10 views
1

NUnit 2.6.4。マージ後NUnit非同期テストが失敗する

私は、非同期メソッドを導入するVS/C#プロジェクトを持っています。

[Test] 
    public async void NullProcThrows_Async() 
    { 
     var keyList = new KeyList<int>(); 
     Assert.Throws<ArgumentNullException>(async() => await keyList.LoadAsync((IDBProcedure)null, "ID", CancellationToken.None)); 
    } 

私たちのトランクにこれを合併している(ノーコンフリクト)となりました。このテストが失敗した:それは多くの合格、このようなテストを持っています。私はその違いを理解しようとしています。

最初は私が期待してい例外ArgumentNullExceptionです:

私はトランク内のコードをトレース

は私がスローされた2つの例外を参照してください。私は唯一の例外とテストに合格ご覧分岐バージョンでテストを実行すると 目は

NUnit.Framework.AssertionException saying Expected 
<System.ArgumentNullException> But was: null 

です。

2つのプロジェクトではどのような違いがありますか?提供されたコードといくつかの問題があるようです

+0

あなたは何をマージしましたか? – SLaks

+0

'async void'ラムダを渡しているようです。 – SLaks

+0

ブランチのコードとトランクを比較して、違いを確認しましたか?マージが "失敗"(間違ったコードをマージする意味で)であり、diffが間違って置き換えたものを表示する可能性が非常に高いです。 – ChrisF

答えて

1

、次の点を考慮してください

[Test, ExpectedException(typeof(ArgumentNullException)] 
public async Task NullProcThrows_Async() 
{ 
    var keyList = new KeyList<int>(); 
    await keyList.LoadAsync((IDBProcedure)null, "ID", CancellationToken.None); 
    Assert.Fail("This should never be executed as we expected the above to throw."); 
} 

NUnit文書によると、あなたの代わりにAssert.ThrowsExpectedException属性を使用する必要があります。そこで、その属性を追加してAssert.Throwsを削除し、代わりにAssert.Failを追加します。また、私は方法Taskを返し、これはasync voidを防いだ。最後に、このようにすると、async lambdaが防止されます。

+0

Davidありがとうございます。私はこれをアップデートと見なします。週末にリリースされた後、マージを成功させるために私は気分が悪かった。すべてが枝でうまくテストされ、幹にはなかった。完全なget-latestが問題を解決したため、いくつかのビットが手抜きされているに違いありません。 – n8wrl

関連する問題