したがって、次のクラスをあざけると仮定します。
public class ClassAParams
{
public int RequestedId { get; set; }
public string SomeValue { get; set; }
}
public class ClassA
{
public void ExecuteAction(ClassAParams executeParams) {}
}
ユニットテストを作成する別のクラス(ClassB
と呼びましょう)があるとします。ClassB.Execute()
が呼び出されたときに、そのClassB
を確認します。 ClassA.ExecuteAction()
を呼び出しますが、そのメソッドを呼び出すパラメーターがClassAParams.RequestedId
の値が1であることを確認します。
通常は、myMock.Verify(x => x.ExecuteAction(new ClassAParams { RequestedId = 1, SomeValue = "something" }));
を実行してこれを処理します
問題は、この単体テストでSomeValue
パラメータまたは他のClassAParams
プロパティの値を確認したくないことです。他のプロパティは他の単体テストでチェックされますが、すべての単体テストで正しいプロパティを使用して呼び出されていることを確認する必要がある場合(特定の単体テストのスコープを気にしない場合でも)は、ユニットのメンテナンスが面倒になります。
Moqを使用して、モックされたメソッドに渡される構造に、特定の値として特定のプロパティのみがあり、残りを無視することを確認する方法はありますか?
mock.Verify
にはオーバーロードがあり、何かをテストできます。これは、テストに役立つはずの例です。
classA.Verify(
a => a.ExecuteAction(
It.Is<ClassAParams>(p => p.RequestedId == 12)
)
);
つまり、"ClassAParams
が引数として渡された場合、RequestId
が12に等しいことを確認します"です。