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