3

私はフェイクを使用して、オブジェクトのフェイクを簡単に生成します。次に、偽のオブジェクトのいくつかのメソッドが呼び出されたかどうかをテストします。問題は、単体テストごとに、偽物の状態を元の状態にリセットすることです。

ユニットテストクラスごとに偽物を1回生成するため、これが必要なので、何らかの方法で呼び出し状態をリセットする必要があります。

これは私のコードがどのように見えるかです:

    [Test]
    public void Test_Process_SampleMessageNEW_Should_Call_ISampleMessageConverter_GetRouteObject()
    {
        //Arrange
        //should reset the state of the fakes, _sampleRouteConvertor and _orderDalcMock are fakes
        _sampleRouteConvertor.BackToRecord();
        _orderDalcMock.BackToRecord();
        A.CallTo(() => _orderDalcMock.GetOrder(A<IRQOrderIDCriteria>.Ignored))
            .Returns(new OrderDTO() {Id = nextId++});
        SampleMessage sampleMessage = SampleMessageTestHelpers.GetSavedSampleMessage();
        sampleMessage.MaterialId = CacheMaterials.GetMaterials()[0].Code;
        sampleMessage.MessageType = "NEW";

        //Act
        SampleMessageProcessor sampleMessageProcessor = new SampleMessageProcessor(sampleMessage);
        sampleMessageProcessor.Process();

        //Assert
        A.CallTo(() => _sampleRouteConvertor.GetRouteObject(A<RoutineSample>.Ignored, A<List<ICacheTrackArea>>.Ignored))
            .MustHaveHappened(Repeated.Exactly.Once);
    }
4

1 に答える 1

5

テストごとに新しいフェイクを作成してみませんか? これで問題は解決します。

毎回新しいフェイクをセットアップするのが複雑なコードの塊である場合は、ヘルパー関数を記述して新しいフェイクをセットアップします。

于 2013-10-30T16:11:30.697 に答える