C# 莫克转换它。伊萨尼<;例外情况>;对它。伊萨尼<;字符串>;期望

C# 莫克转换它。伊萨尼<;例外情况>;对它。伊萨尼<;字符串>;期望,c#,unit-testing,mocking,moq,C#,Unit Testing,Mocking,Moq,我将Moq用于单元测试,我已经建立了这样的期望: myMock.Expect(w => w.MyMethod(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<System.Excep

我将Moq用于单元测试,我已经建立了这样的期望:

myMock.Expect(w => w.MyMethod(It.IsAny<string>(),
                              It.IsAny<string>(),
                              It.IsAny<string>(),
                              It.IsAny<System.Exception>(), null))
      .Returns(myResult);
这可以正常构建和运行,但是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)
Moq.MockVerificationException:未达到以下预期:
IMyClass l=>l.MyMethod(It.IsAny(),It.IsAny(),
It.IsAny(),It.IsAny(),null)
因此,出于某种原因,它将异常更改为字符串

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


谢谢

好的,所以我创建了一个测试方法,其中有一个异常作为参数,并以上面的方式使用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(**MyEnum.Value**,
It.IsAny(),
It.IsAny(),
It.IsAny(),
空)
.返回(myResult);

myMock.Expect(w=>
w、 MyMethod(**It.IsAny()**,
It.IsAny(),
It.IsAny(),
It.IsAny(),
空)
.返回(myResult);
我得到的结果是:

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

因此,它看起来像是采用了第一个参数的类型,并出于某种原因将其应用于所有其他参数….

啊,这是一个新手错误!转换只是一种转移注意力的手段,目的是让我在互联网上四处寻找不存在的疯狂答案

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

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)