2011-01-21 35 views
0

我目前正在学习Rhino-mocks,并认为我混淆了单元测试和嘲讽之间的界限。在我下面的例子中,我有一个只读的Count()属性,我试图对Get()进行测试(仅供讨论使用的一个非常人为的例子)。正如Assert.AreEqual的注释所示,Count()属性的结果应为3时的结果为0.单元测试getter/setter时,如何使用Rhino-mocks?

我的问题是,我可以使用Rhino-mocks实际存根对象(在本例中为只读属性)并测试模拟IProduct对象的get_Count()属性的逻辑

public interface IProduct 
    { 
     int Count { get; } 
    } 

    public class Product : IProduct 
    { 
     private int count; 
     public int Count 
     { 
      get { return count + 1; } 
     } 
    } 

    public class TestFixture 
    { 
     [NUnit.Framework.Test] 
     public void TestProduct() 
     { 
      MockRepository mock = new MockRepository(); 
      IProduct product = mock.Stub<IProduct>(); 

      product.Stub(p => p.Count).Return(2); 
      mock.ReplayAll(); 

      Assert.AreEqual(3, product.Count); //Fails - result from product.Count is 2 
      mock.VerifyAll(); 
     } 
    } 
+2

如果你刚刚开始嘲笑,不要学习记录/重播methodolgy - 阅读犀牛支持的AAA(arrange-act-assert)语法。 – 2011-01-21 16:54:46

回答

2

您正在嘲笑您尝试测试的对象。这从根本上是不正确的 - 你想对你试图测试的对象进行模拟(或存根)依赖。

在上面所示的情况下,您完全不会使用模拟。

另请参阅我对AAA语法的评论。

+0

我认为你的意思是你想模拟依赖关系,而不是依赖关系,也就是说,你想模拟依赖于测试对象的对象。 – 2012-12-19 17:57:28

相关问题