[英]Can I use moq Mock<MyClass> to mock a class, not an interface?
通過https://github.com/Moq/moq4/wiki/Quickstart ,我看到它模擬了一個界面。
我的遺留代碼中有一個沒有接口的類。 當我Mock<MyClass>
,出現以下異常:
附加信息:無法實例化類的代理:MyCompnay.Mylegacy.MyClass。
如何使用 Moq 模擬遺留代碼中的類?
它可以模擬具體類
[TestClass]
public class PlaceholderParserFixture
{
public class Foo
{
public virtual int GetValue()
{
return 11;
}
}
public class Bar
{
private readonly Foo _foo;
public Bar(Foo foo)
{
_foo = foo;
}
public int GetValue()
{
return _foo.GetValue();
}
}
[TestMethod]
public void MyTestMethod()
{
var foo = new Mock<Foo>();
foo.Setup(mk => mk.GetValue()).Returns(16);
var bar = new Bar(foo.Object);
Assert.AreEqual(16, bar.GetValue());
}
}
但,
我收到的消息:
使類成為內部
Castle.DynamicProxy.Generators.GeneratorException:MoqFixture+Foo 類型不是公開的。 無法為不可訪問的類型創建代理。
或者,有一個非虛擬方法
System.NotSupportedException:非虛擬(在 VB 中可覆蓋)成員上的設置無效:mk => mk.GetValue()
不匹配您cannot instantiate
消息,所以其他事情似乎是錯誤的。
如果模擬對象上沒有默認構造函數,則會收到該錯誤消息
例如
public class Foo
{
private int _value;
public Foo(int value)
{
_value = value;
}
public virtual int GetValue()
{
return _value;
}
}
可以通過將值傳遞給 Mock<> ctor 來解決這個問題
例如
var foo = new Mock<Foo>(MockBehavior.Strict, new object[] { 11 });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.