有必要在抽象的'MyAbstractClass'中检查'MyMethod'虚拟方法的实现:
public abstract MyAbstractClass
{
public void MyMethod()
{
Testpassed = true;
}
public abstract int StatusCode{get;internal set;} // **EDIT**: internal setter was added
public bool TestPassed{get;private set;}
}
我尝试过以下操作:
[TestMethod()]
{
Mock<MyAbstractClass> mockClass = new Mock<MyAbstractClass>();
mockClass.Object.MyMethod();
Assert.IsTrue(mockClass.Object.TestPassed);
}
尝试执行'MyMethod'时会生成以下错误:
类型中的方法'set_StatusCode' 'MyAbstractClass`2Proxy0434d60c0f4542fb9b4667ead4ca3a18' 从程序集'DynamicProxyGenAssembly2, Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null'没有 实施..
请告知,我怎样才能解决问题?
非常感谢!
P.S。实际上,我可以从MyAbstractClass继承并为'StatusCode'属性提供实现,但是我有一堆要实现的属性......
答案 0 :(得分:2)
您发布的代码运行正常(小错误拼写除外)。我只是无法让它失败并出现同样的错误。 Moq在运行时实现abstract属性并使其返回默认值(在本例中为0)。尝试更新版本的Moq。
我还要提醒不要将测试逻辑放入课堂。如果TestPassed
的唯一目的是用于测试,那么肯定不属于那里。如果您发布实际代码,我们可以提供更多帮助。
答案 1 :(得分:1)
我知道这不是你的moq问题的答案,但无论如何。即使你有很多抽象属性,VS也很容易添加空(实际上,抛出)实现。因此,如果MyMethod
在设计上不依赖于这些属性,我会添加一个空的派生类并对其进行测试。
答案 2 :(得分:1)
请参阅this answer关于部分模拟的内容,我认为您必须提供具体的实现。