当前位置:  开发笔记 > 编程语言 > 正文

使用Rhino模拟抽象类的默认行为

如何解决《使用Rhino模拟抽象类的默认行为》经验,为你挑选了1个好方法。

我很嘲笑,所以这可能是我还没有接受的东西,但我无法在任何地方找到一个好的例子.

我试图断言默认情况下,从我的抽象类继承的任何类都将在构造函数中实例化一个集合.这是抽象类:

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属性排除在重新实现之外?

谢谢.



1> womp..:

好的,我明白了.把我当作犀牛错综复杂的另一个牺牲品.这种事情让我想要转向更简单的框架,也许我会查看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");
      }
}

我意识到这是一个有状态的测试,但它实际上是涉及相关属性的一些行为测试的更简单的前奏,所以我希望这个案例作为先决条件.希望它可以帮助某人.

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有