0

私はこれを持っています:

  Expect.Once.On( someObj ).Method( "SomeMethod" )
    .With(1) // correct value is 2, I want this to fail
    .Will( Throw.Exception( new Exception() ) );

nmockは、2ではなく1を入力したことを検出すると、例外がスローされます。ただし、テストは合格ではなく失敗(赤)しています。例外を期待しているのに、このテストに合格するにはどうすればよいですか?

4

2 に答える 2

5

NUnit を使用している場合は、次のことができます。

Assert.Throws<Exception>(() => { someObj.SomeMethod(1); });

ExpectedExceptionテストを属性で装飾することもできますが、テストしExceptionたいステートメントだけでなく、何かがスローされた場合にテストが合格します。

編集: MSTest を使用している場合、私の知る限り、属性を使用して例外を予期することしかできません。

[ExpectedException(typeof(Exception)]
public void TestMethod() { ... }

モックからより具体的な例外タイプをスローし、プレーンの代わりにそのタイプを期待することを検討する必要がありますException

NUnit 機能を複製する独自のメソッドを定義することもできます。

public static class ExceptionAssert
{
    public static void Throws<T>(Action act) where T : Exception
    {
        try
        {
            act();
        }
        catch (T ex)
        {
            return;
        }
        catch (Exception ex)
        {
            Assert.Fail(string.Format("Unexpected exception of type {0} thrown", ex.GetType().Name));
        }

        Assert.Fail(string.Format("Expected exception of type {0}", typeof(T).Name));
    }
}
于 2012-06-25T17:12:48.980 に答える
2
[ExpectedException (typeof(Exception))]

編集: おかげで、現在スタジオを持っておらず、構文について 100% 確信が持てませんでした。

于 2012-06-25T17:10:59.937 に答える