0

我正在使用 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)

所以它出于某种原因将异常更改为字符串....

有没有人以前见过这个/知道它为什么这样做以及我能做些什么来修复它/解决它?

谢谢!

4

2 回答 2

2

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

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

于 2009-08-05T14:46:52.360 回答
0

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

我还将第一个参数从枚举值更改为 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)

所以看起来它正在采用第一个参数的类型并将其应用于所有其他参数......

于 2009-08-05T11:30:13.110 回答