0

我目前正在学习 Rhino-mocks,并认为我混淆了单元测试和模拟之间的界限。在下面的示例中,我有一个只读的 Count() 属性,我正在尝试对其测试 Get() (一个非常人为的示例,仅用于讨论目的)。正如 Assert.AreEqual 上的注释所示,Count() 属性的结果是 2,而它应该是 3。

我的问题是我可以使用 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();
        }
    }
4

1 回答 1

2

您正在模拟您要测试的对象。这从根本上是不正确的——你想模拟(或存根)依赖于你试图测试的对象。

在上面显示的情况下,您根本不会使用模拟。

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

于 2011-01-21T16:58:54.097 回答