Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# JustMock:模拟静态方法调用不起作用_C#_.net_Unit Testing_Justmock - Fatal编程技术网

C# JustMock:模拟静态方法调用不起作用

C# JustMock:模拟静态方法调用不起作用,c#,.net,unit-testing,justmock,C#,.net,Unit Testing,Justmock,使用JustMock: 我不知道为什么我对静态方法的arrange调用试图执行原始方法 [Test] public void RunCompleteDivxJob_Negative_Exception() { DebugView.IsTraceEnabled = true; var mediaId = 2000999; var mediaTypeId = (int)CmtMediaType.Video; var queueCmtId = 9999; va

使用JustMock:

我不知道为什么我对静态方法的arrange调用试图执行原始方法

[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(() => QueueDAO.UpdateQueueStatus(queueCmtId, statusError)).DoInstead(() => updateQueueStatusCalled = true);

这些基本上被称为完全相同。那么为什么第一个按预期工作,第二个不按预期工作呢?

可能的问题是QueueDAO.UpdateQueueStatus没有使用预期的参数调用。检查将.IgnoreArguments子句添加到其排列中是否可以使其工作。如果是的话,那就是论点的问题


使用调试器仔细检查方法调用时使用的参数。或者,您可以在调试器中查看DebugView.FullTrace,向下浏览到QueueDAO.UpdateQueueStatus调用的拦截,并查看调用它的参数以及为什么没有为调用选择安排。

statusError如何作为枚举传递给QueueDAO.UpdateQueueStatus?不知道你说的“如何”是什么意思?
Mock.Arrange(() => QueueDAO.UpdateQueueStatus(queueCmtId, statusError)).DoInstead(() => updateQueueStatusCalled = true);