1

Moqを使用して、工場の単体テストと、その後の製品の実行を行っています。

(レポートパラメータをParameterAlgorithmFactoryとして計算するアルゴリズムを返しますIVisibilityParameterAlgorithm) と、これらのそれぞれを呼び出すファクトリ内のメソッドがありますExecute()

これをテストするために、次のような単体テストを作成しました。

//Verfiy that execute is called on all algorithms produced by factory
[TestMethod]
public void ParameterAlgorithmFactory_ReturnedAlgorithm_ExpectExceuteCalled()
{
    var mockFactory = new Mock<IParameterAlgorithmFactory>();
    var parameterAlgorithm = new Mock<IVisibilityParameterAlgorithm>();

    mockFactory.Setup(x => x.Create(LineType.Adjustment)).Returns(parameterAlgorithm.Object);

    new ReportParameters().CreateParameters(new DataSet(), mockFactory.Object);

    parameterAlgorithm.Verify(x=> x.Execute(new DataSet()));
 }

ご覧のとおりparameterAlgorithm、モック ファクトリからモック アルゴリズム ( ) を返しています。これがExecute()呼び出されたことを確認したいと思います。

しかし、私は一貫して得ています:

Moq.MockException: モックでの呼び出しが少なくとも 1 回期待されていましたが、実行されませんでした: x => x.Execute(new DataSet())

デバッグして、行が編集されているのを見ることができますが。Execute()

おそらく、工場でやりすぎている(アルゴリズムを返して実行している)か、Moqを間違った方法で使用していますか?

このテストの失敗の原因について、フィードバックをお待ちしております。

4

1 に答える 1

3

コメントで述べたように、It.IsAny<DataSet>()代わりにnew DataSet()検証用のパラメーターとして使用する必要があります。

Moq は「タイプ」ではなく参照を比較しているように見えるため、検証に失敗することになります。It.IsAny<DataSet>()スタブ パラメータだけが必要な場合は、代わりにここで使用する必要があります。

于 2013-09-23T10:00:00.400 に答える