如何使用Rhino.Mocks模拟受保护的虚拟成员?

时间:2010-04-05 20:43:11

标签: mocking rhino-mocks moq

Moq允许开发人员模拟受保护的成员。我在Rhino.Mocks中寻找相同的功能,但未能找到它。

以下是Moq Quick Start页面如何模拟受保护方法的示例。

// at the top of the test fixture
using Moq.Protected()

// in the test
var mock = new Mock<CommandBase>();
mock.Protected()
     .Setup<int>("Execute")
     .Returns(5);

// if you need argument matching, you MUST use ItExpr rather than It
// planning on improving this for vNext
mock.Protected()
    .Setup<string>("Execute",
        ItExpr.IsAny<string>())
    .Returns(true);

如果我正在追逐不退出的东西,请告诉我。

2 个答案:

答案 0 :(得分:4)

我相信Rhino Mocks中不存在此功能。

你为什么试图嘲笑受保护的成员?为什么不直接测试这个班级呢?或者,您可以创建测试类的子类并手动创建“模拟”受保护方法。

答案 1 :(得分:2)

我们将protected方法创建为internal,然后通过将以下行添加到AssemblyInfo中,将内部公开给单元测试项目和rhino mocks:

[assembly: InternalsVisibleTo("YourNamespace.TestProjectName")]
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]

为我们服务