为什么要使用Rhino Mock桩方法?

3
我刚开始使用Rhino mock为我的项目设置测试用例。 .Return(objToReturn:list) 究竟是做什么的?只有在我初始化并填充列表然后将其传递给模拟存根方法时,它才起作用。我认为我可以使用模拟存根方法来填充一个列表,然后返回那个填充好的列表。
....
    private ProductRepository _productRepository;
    private IProductRepository _productRepositoryStub;

    [SetUp]
    public void SetUp()
    {
        _productRepository = new ProductRepository();


        //Testing using Rhino Mocks
        //Generate stub
         _productRepositoryStub = MockRepository.GenerateMock<IProductRepository>();
    }

    [Test]
    public void Canquerydb()
    {
        IList list = _productRepository.GetAllProducts();
        _productRepository.Stub(x=> x.GetAllProducts()).Return(list);
        _productRepositoryStub.AssertWasCalled(x => x.GetAllProducts());
    }


    /// <summary>
    /// Refaactor and use MockRhino here
    /// </summary>
    [Test]
    public void can_insert_product()
    {
        IProduct product = new Grains("Cheese Bread", "Dairy grain", 0);
        _productRepository.SaveProduct(product);
        _productRepositoryStub.Stub(x=>x.SaveProduct(product));
        _productRepositoryStub.AssertWasCalled(x => x.SaveProduct(product));

    }

1
在这个上下文中,我认为 objToReturn:list 部分只是 C# 4+ 显式参数命名语法,并没有为 Rhino 做任何特殊处理。 - Jeff Mercado
1个回答

4
为了回答您的问题标题:Rhino Mocks 在 Mock 和 Stub 之间有区别。Mock 是唯一能使测试失败的东西,因为它是您正在测试的东西的包装实例 - 您的系统测试 (SUT)。您在 Rhino Mocks 中“存根”某些内容,以便满足模拟对象的依赖关系。存根使您能够查看传递给它的参数,并控制返回结果,以便您可以完全隔离地对您的 Mock 的行为进行断言。
此网站进一步解释了 Mock 和 Stub。
另外,像 Moq 这样的库没有区分 Mock 和 Stub。通过使用泛型,您不必 Mock 您的 SUT。我个人更喜欢 Moq 的简单性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接