2017-05-11 12 views
4

なぜこのコードはテストに合格するのではなく例外をスローしますか?NUnit 2016 Throws.TypeOf

public static int ThrowsSomething(string name) 
{ 
    if (name == null) 
     throw new ArgumentNullException(nameof(name), "can't be null because that's silly"); 
    return -1; 
} 

[Test] 
public void WindowTest() 
{ 
    Assert.That(ThrowsSomething("dave"), Is.EqualTo(-1)); 
    Assert.That(ThrowsSomething(null), Throws.TypeOf<ArgumentNullException>()); 
} 

ユニットテストセッションウィンドウが表示さ :

WindowTestを[0:00.066]失敗しました:System.ArgumentNullExceptionは:それは愚かだから nullにすることはできません

のVisual Studio 2015 ReSharper Ultimate 2016.3およびNUnit 3.6.1

答えて

6

スローされた例外がキャッチされず、テストがexエルシフから完了まで。

使用Assert.Throws<>がスローされた例外

[Test] 
public void WindowTest() { 
    Assert.That(ThrowsSomething("dave"), Is.EqualTo(-1)); 
    Assert.Throws<ArgumentNullException>(() => ThrowsSomething(null)); 
} 

を主張するか、例外がキャッチされ、アサーションが扱うことができるように、デリゲートを使用します。

Assert.That(() => ThrowsSomething(null), Throws.Exception.TypeOf<ArgumentNullException>());