0
使用JustMock: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);
但第二靜態呼叫正在執行的原代碼:
Mock.Arrange(() => QueueDAO.UpdateQueueStatus(queueCmtId, statusError)).DoInstead(() => updateQueueStatusCalled = true);
這些基本上稱爲完全相同。那麼爲什麼第一個按預期工作,第二個沒有?
如何將'statusError'傳遞給'QueueDAO.UpdateQueueStatus'? – 2015-02-05 20:15:00
作爲一個枚舉?不確定你的意思是「如何」? – dcinadr 2015-02-05 21:44:20