4

別の関数で呼び出された関数からの結果をモック/偽造するにはどうすればよいですか? 通常、Test2 は、実際のデータを取得したくない DataAccess メソッドになります。単体テストでテストしたいのは、ビジネス ロジックです。

これは私が今持っているものですが、まったく機能していません。Sum は常に 5 としてアサートされます。

public int Test1()
{
    var value = this.Test2(); //Unittest should substitute with 5
    var businesslogic = value + 10; //The business logic

    return businesslogic;
}

public int Test2()
{
    return 10; //I try to mock this value away in the test. Don´t go here!
}

次に、「ビジネスロジック」で実行したいユニットテストがあります。

[TestMethod()]
public void TestToTest()
{
//Arrange
var instance = A.Fake<IClassWithMethods>();

      //Make calling Test2 return 5 and not 10.
A.CallTo(() => instance.Test2()).Returns(5);

      //Call the method 
var sum = instance.Test1();

//Assert if the business logic in the method works.
Assert.AreEqual(15, sum);
}
4

2 に答える 2

5

私の知る限り、あなたはそれをすることはできません。

あなたinstanceは実際のクラスのインスタンスではなく、そのインターフェースの単なるモックアップであるため、 を呼び出してinstance.Test1()も上記のコードは呼び出されません。ただし、単体で UnitTestTest2メソッドを実行することはできます。

ただし、できることは、2 つの単体テストを作成することです。

最初のテスト (テスト方法Test2) では、必要な依存関係を使用してクラスをインスタンス化します (または、特定の値/パラメーターとの依存関係がない場合)。

次に、同じ入力パラメーターとテストTest()方法を使用して、2 番目のテストを実行します。

モックアップは、インターフェイス (テストするクラスの外部でインスタンス化される) でモックアップする必要がある依存関係にのみ使用されます。つまり、 andがClassAあり、インターフェースに依存している場合。次に、B をモックして A をテストできます。ClassBClassAIClassB

于 2014-02-12T16:46:30.143 に答える