【发布时间】:2014-03-13 04:32:00
【问题描述】:
我有一个单元测试,我必须模拟一个返回 bool 类型的非虚拟方法
public class XmlCupboardAccess
{
public bool IsDataEntityInXmlCupboard(string dataId,
out string nameInCupboard,
out string refTypeInCupboard,
string nameTemplate = null)
{
return IsDataEntityInXmlCupboard(_theDb, dataId, out nameInCupboard, out refTypeInCupboard, nameTemplate);
}
}
所以我有一个 XmlCupboardAccess 类的模拟对象,我试图在我的测试用例中为这个方法设置模拟,如下所示
[TestMethod]
Public void Test()
{
private string temp1;
private string temp2;
private Mock<XmlCupboardAccess> _xmlCupboardAccess = new Mock<XmlCupboardAccess>();
_xmlCupboardAccess.Setup(x => x.IsDataEntityInXmlCupboard(It.IsAny<string>(), out temp1, out temp2, It.IsAny<string>())).Returns(false);
//exception is thrown by this line of code
}
但是这一行抛出异常
Invalid setup on a non-virtual (overridable in VB) member:
x => x.IsDataEntityInXmlCupboard(It.IsAny<String>(), .temp1, .temp2,
It.IsAny<String>())
有什么建议可以解决这个异常吗?
【问题讨论】:
-
你的测试取决于
XmlCupboardAccess? -
很简单..你需要标记它
virtual。 Moq 无法模拟它无法覆盖的具体类型。
标签: c# unit-testing moq