gpt4 book ai didi

unit-testing - Rhino Mock 部分模拟中的 stub setter

转载 作者:行者123 更新时间:2023-12-02 02:02:24 24 4
gpt4 key购买 nike

我正在关注此 question 中已接受的答案但我得到了一个 NullReferenceException

我需要的是让一个属性(getter 和 setter)的部分模拟 stub 表现得像一个 stub (作为一个简单的自动属性)。目前我可以对 getter 进行 stub ,但不能对 setter 进行 stub 。

这可能吗?

编辑:这是一个简单的例子,我希望它有助于解释我的问题。

public class SomeClass
{
public virtual string SomeProperty
{
get{ return SomeMethodDependingOnDBOrAspSession(); }
set{ SomeMethodDependingOnDBOrAspSession(value); } // I want to avoid calling this setter implementation
}
}

var partialMock = MockRepository.GeneratePartialMock<SomeClass>();
partialMock.Stub(p => p.SomeProperty); // I want SomeProperty to behave as an automatic property

最佳答案

当使用 PartialMock 时,您可以使用 Rhino Mocks 的 PropertyBehavior 特性来获得自动实现的属性,例如行为。考虑到您问题中的类别,我通过了以下 nunit 测试。

[Test]
public void TestPartialMock()
{
var someClass = MockRepository.GeneratePartialMock<SomeClass>();
someClass.Stub(x => x.SomeProperty).PropertyBehavior();

string val = "yo!";
Assert.DoesNotThrow(() => someClass.SomeProperty = val);
Assert.AreEqual(val, someClass.SomeProperty);
}

如果您不需要 PartialMock,您可以使用默认具有属性行为的 Stub。您只需将测试的前两行替换为:

var someClass = MockRepository.GenerateStub<SomeClass>();

关于unit-testing - Rhino Mock 部分模拟中的 stub setter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16592440/

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