Moq将It.IsAny <exception>转换为It.IsAny <string> in expectation </string> </exception>

时间:2009-08-03 13:45:11

标签: c# unit-testing mocking moq

我正在使用Moq进行单元测试,我已经建立了这样的期望:

myMock.Expect(w => w.MyMethod(It.IsAny<string>(),
                              It.IsAny<string>(),
                              It.IsAny<string>(),
                              It.IsAny<System.Exception>(), null))
      .Returns(myResult);

它正在嘲笑的方法是:

logger.WriteLogItem(string1, string2, string3, System.Exception, IEnumerableInstantiation);

这构建并运行良好,但是VerifyAll()没有通过,我得到的错误是:

Moq.MockVerificationException : The following expectations were not met:
IMyClass l => l.MyMethod(It.IsAny<string>(), It.IsAny<string>(), 
                         It.IsAny<string>(), It.IsAny<String>(), null)

因此出于某种原因,它将Exception更改为字符串....

有没有人见过这个/有任何想法为什么它这样做以及我可以做些什么来解决它/解决它?

谢谢!

2 个答案:

答案 0 :(得分:2)

啊,这是一个菜鸟错误!转换的东西只是一个红鲱鱼,旨在让我追逐互联网寻找疯狂的答案,而不是那里。

我没有将myMock.Object传递给调用命令!

答案 1 :(得分:0)

好的,所以我创建了一个测试方法,该方法将异常作为参数并以上面的方式使用moq调用,并且它工作正常。因此,将Exception作为参数本身传递似乎不是一个问题。

我还将第一个参数从枚举值更改为It.IsAny枚举。所以来自

myMock.Expect(w =>
    w.MyMethod(**MyEnum.Value**,
        It.IsAny<string>(),
        It.IsAny<string>(),
        It.IsAny<System.Exception>(),
        null))
.Returns(myResult);

myMock.Expect(w =>
    w.MyMethod(**It.IsAny<MyEnum>()**,        
        It.IsAny<string>(),
        It.IsAny<string>(),
        It.IsAny<System.Exception>(),
        null))
.Returns(myResult);

我得到的输出是:

IMyClass l =>
    l.MyMethod(IsAny<MyEnum>(),
        IsAny<MyEnum>(), 
        IsAny<MyEnum>(),
        IsAny<MyEnum>(),
        null)

所以它看起来像第一个参数的类型并且由于某种原因将其应用于所有其他参数.....