我很嘲笑,所以这可能是我还没有接受的东西,但我无法在任何地方找到一个好的例子.
我试图断言默认情况下,从我的抽象类继承的任何类都将在构造函数中实例化一个集合.这是抽象类:
public abstract class DataCollectionWorkflow : SequentialWorkflowActivity { private readonly DataSet _output = new DataSet(); private List_params = null; public DataCollectionWorkflow() { _params = new List (); } public virtual IList Parameters { get { return _params; } set { _params = (List )value; } } }
我如何用Rhino嘲笑这个?如果我做GenerateMock
(或存根),构造函数运行并且mock的私有字段" _params
"被初始化,但mock的" Parameters
"属性只是null.
显然,生成的模拟子类重写了属性实现.是否有某种方法可以将Parameters属性排除在重新实现之外?
谢谢.
好的,我明白了.把我当作犀牛错综复杂的另一个牺牲品.这种事情让我想要转向更简单的框架,也许我会查看MoQ.
所以答案是使用PartialMocks.我曾经简单地玩过生成部分模拟,但是当我在它上面运行调试器时,我注意到属性甚至都不为空,它们抛出奇怪的异常,所以我看起来并没有那么深.我使用的是短格式AAA类型的语法.
事实证明,如果我只是将模拟放入播放模式,测试工作 - 属性按原样使用(因为它们应该与部分模拟).
所以这是答案:
[Test] public void ShouldCreateParameterListInConstructor() { var mockRepository = new MockRepository(); var mock = mockRepository.PartialMock(); using ( mockRepository.Record() ) { } using (mockRepository.Playback()) { Assert.That(mock.Parameters, Is.Not.Null, "DataCollectionWorkflow base class didn't create new param collection"); } }
我意识到这是一个有状态的测试,但它实际上是涉及相关属性的一些行为测试的更简单的前奏,所以我希望这个案例作为先决条件.希望它可以帮助某人.