2017-08-22 7 views
0

私は、実行時に例外を投げて設定しようとしているメソッドを持つMockオブジェクトをMoqフレームワークを使用してテストします。実行時にMoqで<T>()をスローして

var mockMySvc = new Mock<IMySvc>(); 

mockMySvc 
    .Setup(x=>x.SomeMethod()) 
    .Throws<Exception>(); 

//Execution of some code 

//At the assertions 
mockMySvc.VerifyAll(); 

は、コードは、例外がスローされているにもかかわらずmockMySvc約すべてexpectionsが満たされたではない文句を言います。私は何かを逃しているのでしょうか、.Throws()の機能では.VerifyAll()メソッドが動作しません。

答えて

1

は、私はそれを設定するためのあなたの方法を知らないが、私はいつもそれをこのように実行します。

Assert.Throws<Exception>(() => myclass.SomeMethod()); 

あなたが何かを確認する必要はありませんこの方法です。


はあなたのコメントに基づいて、これはあなたがcatchブロック内のコードを確認することができるように例外は、メソッド内でスローされていることを確認する方法です。

[Test] 
public void Test1() 
{ 
    _filmService.Setup(f => f.FindById(It.IsAny<int>())).Throws<Exception>(); 
    _filmController.Test(); 
    _filmService.Verify(f => f.Exists(It.IsAny<Film>()), Times.Once); 
} 

実際のコード:

public ActionResult Test() 
{ 
    try 
    { 
     _filmService.FindById(-1); 
    } 
    catch (System.Exception) 
    { 
     _filmService.Exists(null); 
    } 
    return View(); 
} 

これは私が私のコードでテストし、それが正常に動作する一例に過ぎません。

+0

'someMethod()'の範囲内で、私はtry catchブロックを持っています。 tryはcatchブロックにExceptionを投げる必要があります。これが私のコードでセットアップ/スローを通して達成していることです。私のコードは例外を返さないでしょう。あなたが主張したのは、このメソッドが例外をスローするという前提です。 –

+1

私は今理解しています。あなたは実際に 'SomeMethod'メソッドを実行しますか?ここで見て:http://www.syntaxsuccess.com/viewarticle/mock-exceptions-using-moq – FCin

+0

はい、それは私がしようとしている - 例外をシミュレートしています。私は、VerifyAll()によってスローされた例外を検証するべきではなく、正しい種類の例外がログに記録されていることを検証するべきだと考えています。ありがとうございました!それは、私が論理的に間違っていたことを理解する助けになりました。 –

関連する問題