2017-02-15 8 views
2

これは私を狂ってしまいます!私はNUnitバージョン3.6.0を使用しており、私のテストから予期しない結果を得ています。私が何か期待していたときに、テストの実行は、私はとNullReferenceExceptionを取得すると、「期待を 『X』は実際には 『Y』です」NUnit 3値がnullでない場合、Assert.ThatがNullReferenceExceptionをスローします

[TestFixture] 
public class NunitTest 
{ 
    [Test] 
    public void TestIt() 
    { 
     string x = "x"; 
     string y = "y"; 

     // this fails (expected) but with NullReferenceException (unexpected) 
     Assert.That(x, Is.EqualTo(y)); 
    } 
} 

:私は私が持っている問題を示すには本当に簡単なテストを作成しました

私はインクルードがアサート助長していると彼らはすべて

[TestFixture] 
public class NunitTest 
{ 
    [Test] 
    public void TestIt() 
    { 
     string x = "x"; 
     string y = "y"; 

     // this passes 
     bool atest = x.Equals(y); 
     Assert.IsFalse(atest); 

     // this passes 
     Assert.IsNotNull(x); 
     // this passes 
     Assert.IsNotNull(y); 

     // this fails (expected) but with NullReferenceException (unexpected) 
     Assert.That(x, Is.EqualTo(y)); 
    } 
} 

他の奇妙なことは、値が等しいとき、テストが正常に合格したことである渡します。

at NUnit.Framework.Assert.ReportFailure(String message) 
    at NUnit.Framework.Assert.ReportFailure(ConstraintResult result, String message, Object[] args) 
    at NUnit.Framework.Assert.That[TActual](TActual actual, IResolveConstraint expression, String message, Object[] args) 
    at NUnit.Framework.Assert.That[TActual](TActual actual, IResolveConstraint expression) 
    at VSI.Tests.NunitTest.TestIt() in c:\Users\DavidBecker\Documents\Visual Studio 2013\Projects\VSI.Tests\VSI.Tests\NunitTest.cs:line 30 

ツール:

.NET Frameworkバージョン4.5.1
のVisual Studio 2013 Professionalの
ReSharperのバージョンも価値がある、私はAssert.AreEqual(x, y)

スタックトレースを使用したとき、私は正確に同じ問題を得るに注目9

編集:私はResharperからテストを実行しています。

+0

それはReSharperのが問題であることのような表情を開始しています。 NUnit.ConsoleRunner.3.6でテストを実行した場合。0期待どおりに動作します。私はResharperランナーとうまく動作するNUnit 3.2.1で他のテストをしていますので、RS/NUnit.3.6.0のコンボが犯人だと思います –

答えて

2

ReSharper 9が問題です。

ReSharperのは、一部の古いNUnitの2ランナーははNUnitの3テストを実行するためにを表示されることを意味NUnitのバージョン2と3の間の類似点がいくつかありますがされているReSharperのバージョン10までNUnitの3をサポートしていませんでした - しかし、これは正確に行われることはなく、サポートもされていません。

最終バージョンのNUnit 2(2.6.4)では、サポートされていない方法でテストを実行しようとするのではなく、NUnit 3のテストをロードしようとするとエラーが発生するような例外が発生しました。 。しかし、ReSharper 9はNUnit 2.6.4より古いランナーを使用していますが、このエラーは発生しません。

NUnit 3.6でこれが明らかになったのは、NUnit内でアサーションがどのように登録されているのかという内部的な変更によるものです。この偶然の成功はもはや成功していませんが、これは利点です。テストが合格であるように見えますが、実際に正しく実行されていないこの右側の障害を取り除くためです。

ReSharperはバージョン10のNUnit 3をサポートしていますが、これは一回限りの購入モデルからサブスクリプションモデルに切り替わったときの私の考えです。別のオプションとして、NUnit 3テストアダプタ(NuGetパッケージまたはVSIX拡張)を検討してください。これにより、Visual Studio独自のテストウィンドウを使用してNUnitテストを個別に実行できます。

(さらに詳細にご興味を持っている場合、この問題はまた、GitHubの上で、最近の上に思い付いた:https://github.com/nunit/nunit/issues/1992

+0

詳細な説明のためにありがとう。正直言って、単体テストのためにRSを使うのは決して簡単なことではありません。ただ便利です。間違いなくNUnit 3 Test Adapterを見ていきます。 –

+0

問題ありません。 ReSharper 10を使用していますが、Resharper NUnitランナーがかなりバグがあり、多くの場合、NUnitコンソールランナーまたはアダプターに頼ることになります。 Resharperは、最も実用的なインターフェイスを備えているため、実際に実行されているものの中で最も成功していないからです。 – Chris

0

Resharper(9)ユニットテストランナーでNUnit.3.6.0テストを実行すると、予期しない結果が生じます。代わりにNUnit.ConsoleRunner.3.6.0を使用してください。

(これは私にとってはうってつけの方法ですが、誰かがRS9でうまく動作するようにしてくれれば教えてください)。

+0

私はこれを答えとしてマークしたいと思っていましたが、上記のChrisの説明私が知っているものを超えて行くので、より多くの有用な –

関連する問題