其他分享
首页 > 其他分享> > 为何使用Rhino Mock Stub方法?

为何使用Rhino Mock Stub方法?

作者:互联网

我刚刚开始使用Rhino模拟为项目设置测试用例. .Return(objToReturn:list)到底做什么?

如果我初始化并填充列表,然后将其传递给模拟存根方法,它似乎只能工作.我以为我可以使用Mock Stub方法填充列表,然后返回该填充列表.

....
    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));

    }

解决方法:

回答您的问题的标题:Rhino模拟在Mocks和Stubs之间进行区分.模拟是使测试失败的唯一原因,因为它是您正在测试的东西(被测系统(SUT))的包装实例.您在Rhino模拟中“存根”某些东西,以便可以满足模拟对象的依赖性.存根使您可以直观地了解传递给它的参数,并可以控制返回结果,以便可以完全隔离地对Mock的行为进行断言.

该站点还有explanation of Mocks and Stubs.

此外,像Moq这样的库并没有在Mocks和Stubs之间进行区分.通过使用泛型,您不必模拟您的SUT.我个人更喜欢Moq的这种简单性.

标签:c,rhino-mocks
来源: https://codeday.me/bug/20191031/1974917.html