私は、メソッドが正常に動作するメソッドが呼び出されたかどうかを調べるために、ほとんどの作業ユニットテストを行っています。しかし、私はそのメソッドに渡されるパラメータをチェックしたいと思います。 Verify
を使用する特定の引数セットが渡されているかどうかを調べることができますが、これらが渡されずにテストが失敗した場合、実際に何がメソッドに渡されたかを確認する方法はありますか?Mockに何が渡されたかを確認しますか?
例:私のテストで
sut.Setup(x => x.MyMethod(It.IsAny<myClass>()).Verifiable();
sut.Object.DoAThing();
sut.Verify(x => x.MyMethod(It.Is<myClass>(v => v.thing == 1)));
が、これは失敗します(v.thing
が1以外のものになります)、しかし私は、v.thing
セットはに何がされて知っていただきたいと思いますか?私はこの種のフィードバックが私のコードとユニットテストのデバッグに本当に役立つことを知っています。
私は取得していますエラーが単にx.MyMethodは(それらの期待パラメータを持つ)と呼ばれることはなかったと言っています。
解決策はありますか?明白な何かが欠けている?
最小限の例には、私のポイントを説明します
public class myClass
{
public struct myStruct {
public int thing;
}
public virtual void MyMethod(myStruct x)
{
// Code goes here
}
}
public class sutClass
{
public myClass target = new myClass();
public void DoAThing()
{
myClass.myStruct toBePassed = new myClass.myStruct { thing = 8 };
target.MyMethod(toBePassed);
}
}
[TestMethod]
public void Test1()
{
Mock<myClass> mMyClass = new Mock<myClass>();
sutClass sut = new sutClass();
sut.target = mMyClass.Object;
mMyClass.Setup(x => x.MyMethod(It.IsAny<myClass.myStruct>())).Verifiable();
sut.DoAThing();
mMyClass.Verify(x => x.MyMethod(It.Is<myClass.myStruct>(v => v.thing == 1)));
}
上記の簡単なテストは明らかに失敗を返します。
Expected invocation on the mock at least once, but was never performed: x => x.MyMethod(It.Is<myStruct>(v => v.thing == 1))
は私が見たいのは、期待と実際に何が起こったものとの違いは何であったかMyMethod
に渡されたものの出力です。多くの場合、Assert.AreEqual(expected, actual)
が返されます。 (期待される文字列と実際の文字列など)。
にpassedValueに設定して印刷され、それが不完全であるように、その現在の状態での質問は不明です。 [ask]を読んで、あなたの問題をよりよく理解するために使用できる[mcve]を提供してください。 – Nkosi
サンプルコードを提供するように更新しました。 – Graeme