0

JustMock の使用:

静的メソッドの手配呼び出しが元のメソッドを実行しようとしている理由がわかりません。

[Test] 
public void RunCompleteDivxJob_Negative_Exception()
{
    DebugView.IsTraceEnabled = true;
    var mediaId = 2000999;
    var mediaTypeId = (int)CmtMediaType.Video;
    var queueCmtId = 9999;
    var cmtFileType = CmtFileType.SourceMediaFile;
    var statusError = CmtQueueStatus.Error;
    var exception = new Exception("test");

    // ARRANGE
    var encodeJobStateMachineManager = Mock.Create<EncodeJobStateMachineManager>(Behavior.CallOriginal);
    var logger = Mock.Create<Logger>(Behavior.CallOriginal, typeof(EncodeJobStateMachineManager));
    var inst = new PrivateAccessor(encodeJobStateMachineManager);
    inst.SetProperty("_log", logger);
    var createCompleteJobCalled = false;
    Mock.Arrange(() => DivxEncodeJob.CreateCompleteJob(mediaId, mediaTypeId, queueCmtId, cmtFileType))
    .DoInstead(() => createCompleteJobCalled = true);
    Mock.Arrange(() => encodeJobStateMachineManager.EncodeJob.Submit()).Throws(exception).MustBeCalled();
    logger.Arrange(x => x.Error(Arg.AnyString, exception)).MustBeCalled();
    //Mock.SetupStatic(typeof(QueueDAO));
    var updateQueueStatusCalled = false;
    Mock.Arrange(() => QueueDAO.UpdateQueueStatus(queueCmtId, statusError)).DoInstead(() =>  updateQueueStatusCalled = true);

    // ACT
    encodeJobStateMachineManager.RunCompleteDivxJob(mediaId, mediaTypeId, queueCmtId, cmtFileType);

    // ASSERT
    Mock.Assert(encodeJobStateMachineManager);
    Assert.IsTrue(createCompleteJobCalled);
    Assert.IsTrue(updateQueueStatusCalled);
}

最初の静的呼び出しは、メソッド呼び出しを正しくモックしています。

Mock.Arrange(() => DivxEncodeJob.CreateCompleteJob(mediaId, mediaTypeId, queueCmtId, cmtFileType))
            .DoInstead(() => createCompleteJobCalled = true);

しかし、2 番目の静的呼び出しは元のコードを実行しています。

Mock.Arrange(() => QueueDAO.UpdateQueueStatus(queueCmtId, statusError)).DoInstead(() => updateQueueStatusCalled = true);

これらは本質的にまったく同じように呼ばれます。では、なぜ最初のものは期待どおりに機能し、2 番目のものは機能しないのでしょうか?

4

1 に答える 1