English 中文(简体)
在测试使用Rhino mo子进行之前,我如何测试需要用来确定物体的方法?
原标题:How do I test a method that needs to be called to set up the object before the test is run using Rhino mocks?
  • 时间:2009-08-21 10:38:39
  •  标签:

我有问题检验这一设想。

一张发票有两个州——完成和未完成——我想测试该方法的提交者。 FinishInvoice()打电话给DAO.FinishInvoice()然后打电话给DAO.GetInvoice()然后提出观点。 结果。 问题在于,我需要请DAO.GetInvoice()首先填写一张发票,然后从提交者那里索取。 初步意见(经另一次测试)。

我在此检验:

using (mocks.Record())
{
    SetupResult.For(view.Invoice).PropertyBehavior();
    SetupResult.For(DAO.GetInvoice(1)).Return(invoice);
    Expect.Call(DAO.FinishInvoice(1)).Return(true);
    Expect.Call(DAO.GetInvoice(1)).Return(invoice);
}
using (mocks.Playback())
{
    Presenter presenter = new Presenter(view, DAO);
    presenter.InitializeView(1);
    presenter.FinishInvoice();
}

DAO.GetInvoice()将称为“观点”。 意见一开始即提出。 它不是试验的一部分,但如果我不提出看法,它就会失败。 对未结账单的发票必须确定收益价值。

第二次致DAO.GetInvoice()的电话来自FinishInvoice()和is测试的一部分。

如果我接受这一检验,我就在德国联邦统计局(德国)获得失败;预计数字1,实际数字0。 我已穿过该法典,的确叫DAO。 当FinishInvoice()被点名时,必须成为我的测试法,它有错,而不是我的手法。

如果我改变的话:

    SetupResult.For(DAO.GetInvoice(1)).Return(invoice);

:

    Expect.Call(DAO.GetInvoice(1)).Return(invoice);

它是行之有效的,但这只是检验的一部分,因为它是建立起来所需要的(但是,不能将它放在《原则和规则》中,因为它并非所有测试所必须)。

我相信,这并非我需要做的灾难,而是想学会如何确定我为什么要这样做。

问题回答

由于你想要测试你的DAO级的互动,你需要创建网站 rel=“nofollow noretinger” ,作为模拟,而不是一个 st。 这就是说,你可以为此而利用成果。

如果你不关心这种方法的顺序,你就只能使用Repeat-syntax:

using (mocks.Record())
{
    SetupResult.For(view.Invoice).PropertyBehavior();
    Expect.Call(DAO.FinishInvoice(1)).Return(true);
    Expect.Call(DAO.GetInvoice(1)).Return(invoice).Repeat.Any();
}
using (mocks.Playback())
{
    Presenter presenter = new Presenter(view, DAO);
    presenter.InitializeView(1);
    presenter.FinishInvoice();
}

如果你关心这种方法的顺序,你就必须在:

using (mocks.Record())
{     
    SetupResult.For(view.Invoice).PropertyBehavior();

    using (mocks.Ordered())
    {  
       Expect.Call(DAO.GetInvoice(1)).Return(invoice);     
       Expect.Call(DAO.FinishInvoice(1)).Return(true);
       Expect.Call(DAO.GetInvoice(1)).Return(invoice);
    }
}
using (mocks.Playback())
{
    Presenter presenter = new Presenter(view, DAO);
    presenter.InitializeView(1);
    presenter.FinishInvoice();
}

然而,如果你重新打电话。 在《刑法》中,我两次说,一部法典轮.,你也许会把它改成一个呼吁。

此外,这里指的是:

//Arrange
DAO.Stub( x => x.GetInvoice(1) ).Return(true).Repeat.Any();

//Act
Presenter presenter = new Presenter(view, DAO);
presenter.InitializeView(1);
presenter.FinishInvoice();

//Assert
DAO.AssertWasCalled( x => x.FinishInvoice(1) );
DAO.AssertWasCalled( x=> x.GetInvoice(1) );

你可以看到,这是一件大事,你甚至可以把一ck车当作ck和ub。





相关问题
热门标签