2009-12-01 95 views
1

我刚刚使用Rhino mocks制作了以下测试。我的测试看起来有效,对那些更有经验的嘲笑者有意义吗?犀牛嘲笑 - 这个测试看起来是否合理?

我是一个有点困惑,我还没有使用DynamicMock()StrictMock()方法来创建一个看似有效的测试。

此测试测试使用提供的参数在提供的ICachingStrategy上调用Add方法。

object o = new object(); 
    DateTime d = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day + 1, 0, 0, 0); 
    CacheStorageStyle s = CacheStorageStyle.Unmodified; 
    string f = "test"; 

    //arrange 
    var stubStrategy = MockRepository.GenerateStub<ICachingStrategy>(); 
    var stubEncoder = MockRepository.GenerateStub<ICacheItemEncoder>(); 
    stubStrategy.Stub(x => x.Add(o,d,s,f)).Return("test:key");    
    stubEncoder.Stub(x => x.Encode(o,s)).Return(o); 

    _mocks.ReplayAll(); 

    //act 
    ICache c = new Cache(stubStrategy, stubEncoder); 
    c.Add(o, d, s, f); 

    //assert 
    stubStrategy.AssertWasCalled(x => x.Add(o,d,s,f)); 

回答

4

问题是:它成功了吗?你期望它?如果答案是肯定的,那么测试是好的。您可以进一步测试该测试,方法是通过在您的实施中致电Add()来强制失败。如果没有调用Add()方法,则测试应该失败。

Here是解释存根和嘲difference之间差异的相关文档。本质区别在于存根“永远不会导致测试失败”。他们只是为了使测试代码正常工作。文件进一步建议尽可能优先考虑桩头。

您的测试对我而言似乎有效,因为您主要关注是否调用了Add()方法,并且您明确声明了该调用。你没有测试其他的方法调用,所以你不是在嘲笑它们,而是在扼杀它们。

1

re:Strict vs Dynamic - 值得注意的另一件事是,在RhinoMocks 3.5中调用MockRepository.GenerateMock()不会产生严格的模拟。

根据您的测试,您可能会/可能不在乎您的模拟上未被调用的内容。