gpt4 book ai didi

c# - Rhino Mock Partial Stub 必须是公共(public)方法吗?

转载 作者:行者123 更新时间:2023-11-30 21:17:58 25 4
gpt4 key购买 nike

我已经使用 Rhino Mocks 编写了一些单元测试,我对结果很满意,除了我必须将底层 Web 服务公开为公共(public)虚拟 (isUserInRoleWebService) 大概是因为这是我的部分 stub mock 。我通常使用反射来避免暴露私有(private)方法,但这对模拟对象不起作用。有没有人解决这个问题?一定是常见的场景。

[SetUp]
public void SetUp()
{
_mockRepository = new MockRepository();
_entitlementCache = _mockRepository.PartialMock<EntitlementCache>();
}

[Test]
// simple test to verify membership of a single role
public void Test_SingleRoleMember()
{
(new ReflectedObject(_entitlementCache)).InvokeInstanceMethod(
"setRoleHierachy",
new object[] { hierachy2Level }
);

using (_mockRepository.Record())
{
// I had to convert isUserInRoleWebService to public :-(
_entitlementCache.Stub(x => x.isUserInRoleWebService("user", "Role 1"))
.Repeat
.Once()
.Return(true);
}

using (_mockRepository.Playback())
{
bool res = _entitlementCache.IsUserInRole("user", "Role 1");
Assert.AreEqual(true, res, "user member of 'Role 1'");
}
}

[TearDown]
public void TearDown()
{
_mockRepository.ReplayAll();
_mockRepository.VerifyAll();
}

最佳答案

您可以使用部分模拟来覆盖protected internal virtual 方法。请注意,您需要在被测项目的 AssemblyInfo.cs 中指定 [InternalsVisibleTo("YourTestProject")]

protected internal(或 protected internal,如果您愿意)是 protectedinternal 的联合。因此,internal+[InternalsVisibleTo] 使该方法对您的测试项目可见,protected 允许 Rhino 覆盖virtual 方法。

关于c# - Rhino Mock Partial Stub 必须是公共(public)方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4519246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com