0

データ アクセス クラスをテストしようとしています。基本的に、function1 は DataContext から直接データを読み取り、もう 1 つの function2 はフィルターを追加しています。function1 と function2 は、同じクラスまたは継承クラスにすることができます。

function1 の戻り値をスタブして function2 をテストするにはどうすればよいですか?

ここまでたどり着いたサンプルコードですが、動きません。Rhino Mocks と StructureMap Auto Mock を使用しようとしましたが、スタブ時にエラーが発生します。

どんな助けでも大歓迎です。どうもありがとう。

public class TestClass : ITestClass
{
    private DbContext _context;

    public IEnumerable<TestObject1> TestFunction1()
    {
        return _context.GetSomething();
    }

    public TestObject2 TestFunction2()
    {
        return TestFunction1().Where(x=>x.Parent == null);
    }
}
public interface ITestClass
{
    IEnumerable<TestObject1> TestFunction1();
    TestObject2 TestFunction2();
}
[Test]
public void TestFunction2_Test()
{
    var mock = MockRepository.GenerateMock<TestClass>();

    var test = new List<TestObject1>();

    mock.Stub(x=>x.TestFunction1()).Return(test);

    var result = mock.TestFunction2();

    Assert.AreSame(1, result.Count());
}
4

1 に答える 1

2

これを機能させるために必要なのは、「部分モック」です。Rhino モックは、部分モックを実行する場合にのみ仮想メソッドをスタブ化できます。マークを付けるTestFunction1と、機能virtualするはずです。

またAssert.AreEqual、値が等しいかどうかをチェックするため、 を使用する必要があります (「オブジェクトは同等ですか?」)。Assert.AreSame参照の等価性をチェックします (「それらは同じオブジェクトですか?」)。詳細については、この回答を参照してください。

一般的に部分モックに関しては、避けるべきです。部分的なモックを実行しなければならないことは、多くの場合、クラスがやりすぎていることを示しています。クラスの単体テストの一部として関数をテストするか、別の共同作業クラスに関数を抽出します。

于 2013-07-30T20:10:42.633 に答える