【问题标题】:Moq Setup InvalidCastException when Mocking an interface that implements multiple interfaces having the same method signature模拟实现具有相同方法签名的多个接口的接口时,Moq 设置 InvalidCastException
【发布时间】:2013-11-12 14:58:22
【问题描述】:

所以我有以下代码:

interface Parent1
{
    void Foo();
}

interface Parent2
{
    void Foo();
}

interface ChildInterface : Parent1, Parent2
{
}

我想模拟 ChildInterface 并设置它的 Foo()。所以我用最小起订量来做这个:

var c = new Mock<ChildInterface>(MockBehavior.Strict);
c.Setup(p1 => ((Parent1)p1).Foo());
c.Setup(p2 => ((Parent2)p2).Foo());

它不能只接受而不进行显式转换。来自explanations from this SO question。所以我就这么做了。它编译没有错误

但是在运行它时,它会抛出一个InvalidCastException

这是堆栈跟踪:

   at lambda_method(Closure )
   at Moq.Mock.GetInterceptor(Expression fluentExpression, Mock mock)
   at Moq.Mock.<>c__DisplayClass19`1.<Setup>b__18()
   at Moq.PexProtector.Invoke[T](Func`1 function)
   at Moq.Mock.Setup[T](Mock`1 mock, Expression`1 expression, Func`1 condition)
   at Moq.Mock`1.Setup(Expression`1 expression)

您对如何在 Moq 中发挥作用有任何想法吗?

【问题讨论】:

    标签: c# interface moq .net


    【解决方案1】:

    试试这个:

    c.As<Parent1>().Setup(p1 => p1.Foo());
    c.As<Parent2>().Setup(p2 => p2.Foo());
    

    【讨论】:

      猜你喜欢
      • 2013-07-03
      • 1970-01-01
      • 2011-12-13
      • 1970-01-01
      • 2011-07-26
      • 1970-01-01
      • 2020-12-09
      • 2011-02-19
      • 1970-01-01
      相关资源
      最近更新 更多