簡體   English   中英

當嘲笑實現具有相同方法簽名的多個接口的接口時,Moq Setup InvalidCastException

[英]Moq Setup InvalidCastException when Mocking an interface that implements multiple interfaces having the same method signature

所以我有以下代碼:

interface Parent1
{
    void Foo();
}

interface Parent2
{
    void Foo();
}

interface ChildInterface : Parent1, Parent2
{
}

我想模擬ChildInterface並設置其Foo()。 所以我用Moq來做到這一點:

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

它不能不進行顯式轉換就接受。 這個SO問題的解釋 所以我做到了。 並且它編譯沒有錯誤

但是在運行它時,它將引發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)

您對起訂量如何工作有任何想法嗎?

嘗試這個:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM