【发布时间】:2014-01-04 03:07:14
【问题描述】:
我有一个包含公共方法的类,它依赖于内部方法才能正确返回其值。
让我们考虑以下类和测试文件:
public class ClassUnderTest
{
public string NotMockedPublicMethod()
{
return MockedMethod();
}
virtual public string MockedMethod()
{
return "original";
}
}
以下测试用例可以工作:
var mock = new Mock<ClassUnderTest> { CallBase = true };
mock.Setup(m => m.MockedMethod()).Returns("mocked");
Assert.AreEqual("mocked", mock.Object.NotMockedPublicMethod());
但是假设我的这个MockedMethod() 在外部没有效用。问题是将此方法标记为internal(即使正确使用InternalsVisibleTo()):
virtual internal string MockedMethod()
将使完全相同的测试失败并显示消息Assert.AreEqual failed. Expected:<mocked>. Actual:<original>。
这是最小起订量错误还是某些限制?
【问题讨论】:
-
谢谢@Blindsniper,但我的问题不在于简单地模拟
internal方法。正如我所说,我确实使用了InternalsVisibleTo指令,但由于某种原因,将其更改为内部后测试停止成功。 -
看起来应该可以了。你从 Moq 那里得到关于嘲笑一个无法访问的成员的例外吗?然后
Setup应该可以工作。如果不设置CallBase = true会怎样? -
感谢@JeppeStigNielsen。问题解决了。当我说我使用
InternalsVisibleTo时,我不知道I should also let it visible to the proxying assembly。它现在可以工作了。
标签: c# unit-testing moq partial-mocks