2012-04-30 24 views
2

私は、特定の例外条件が正常に処理されていることを確認するために、私が単体テストしているクラスを持っています。この目的のために、私は例外をスローするために内部的に呼び出されるメソッドを疑似します。Moqを使用して条件付き引数を使用してメソッドをモックする

私のモックのセットアップは次のようになります。

fr.CallBase = true; 
fr.Setup(m => m.PutFile(It.IsAny<IFileConnection>(), It.IsAny<string>(), It.IsAny<string>())) 
    .Throws(new System.IO.IOException("Test Exception", new System.Net.Sockets.SocketException())); 

これは私はそれが何をしたいのかを正確に行います。

しかし、ここでは、特定の値に対して例外をスローするだけで連続性をテストしたいと考えています。私はそれが次のようになります考えた:

fr.Setup(m => m.PutFile(It.IsAny<IFileConnection>(), It.Is<string>(a => a == "foo2.txt"), It.IsAny<string>())) 
    .Throws(new System.IO.IOException("Test Exception", new System.Net.Sockets.SocketException())); 

...しかし、これは動作するようには思えません。私は間違って何をしていますか?私は

m.PutFile(It.IsAny<IFileConnection>(), "foo2.txt") 

+3

これはうまくいくはずです。テストケース全体のコードを投稿できますか? – BishopRook

+0

モックしようとしている関数呼び出しを共有できますか? –

+0

@BishopRook、私はテストを追加しました。 –

答えて

5

彼はジェネリックといくつかの奇数判定を引用

It.Is<string>(a => Equals(a, "foo2.txt")) 

私が試してみてくださいコメントで提案されている誰かがありました。ジェネリック医薬品とは何か関係があるのか​​どうかはわかりませんが、この変更は実際にはうまくいきました。ポスターがコメントを削除したので、私は彼の代わりに答えを出しています。

0

:要求ごと

、全体のテスト名?テスト仕様を幅広く(^foo\\d.txt$)設定しているようですが、あなたのモックは狭く(foo2.txt)、それ以外の方法ではありませんか?

+0

それが私が試した最初のことでした。それは例外をスローしませんでしたが、どちらもうまくいきませんでした。フィクスチャ内の全てのテストケースについて、 '[Setup]'の –

0

どうfrの内部がこれまでにファイルとしてfoo2.txtGetFileを呼び出すことを知っていますが動作するはずだと思う

[Test] 
public void ManualRouteInterruptedInDownloadContinuesOn() 
{ 
    var firstRoute = this.UnitOfWork.GetFirstRoute(); 
    Route r = this.UnitOfWork.GetRouteByID(firstRoute.RouteID); 
    r.RegExMatch = "^foo\\d.txt$"; 
    r.Manual = true; 
    r.NotifyOfNewFiles = "[email protected]"; 
    this.UnitOfWork.Save(); 

    var fr = new Mock<ManualRouting>(r.RouteID); 
    fr.CallBase = true; 
    fr.Setup(m => m.GetFile(It.IsAny<IFileConnection>(), It.Is<string>(a => a == "foo2.txt"), It.IsAny<string>())) 
     .Throws(new System.IO.IOException("Test Exception", new System.Net.Sockets.SocketException())); 

    fr.Object.ExecuteRoute(firstRoute.RouteID); 
    Assert.IsTrue(fr.Object.Errors.Count == 1); 
    Assert.IsTrue(fr.Object.Matches.Count == 3); 
} 
+0

に 'foo1.txt'、' foo2.txt'、 'foo3.txt'を作成し、' [Teardown ] 'メソッド。私はそれが正常に処理されていることを確認するために失敗する "中間"ファイルをしたい。 –

関連する問題