我正在学习Rhino-mocks,并认为我混淆了单元测试和模拟之间的界限。在我下面的例子中,我有一个readonly Count()属性,我试图测试Get()on(一个非常人为的例子仅供讨论)。正如Assert.AreEqual上的注释所示,当它应该是3时,Count()属性的结果是2。
我的问题是我可以使用Rhino-mocks实际存根对象(在本例中是readonly属性)并测试模拟IProduct对象的get_Count()属性的逻辑吗? p>
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();
}
}
答案 0 :(得分:2)
您正在嘲笑您要测试的对象。这基本上是不正确的 - 你想在你想要测试的对象上模拟(或存根)DEPENDENCIES。
在上面显示的情况下,你根本不会使用模拟。
另见我对AAA语法的评论。