如何验证是否在被测系统上调用方法(不是模拟)

Tre*_*vor 6 java junit mocking powermock

我正在尝试编写一个单元测试,需要确认是否调用了一个方法.我正在使用JUnit,Mockito和PowerMock.

public class Invoice
{

  protected void createInvoice()
  {
    // random stuff here
    markInvoiceAsBilled("57");
  }

  protected void markInvoiceAsBilled(String code)
  {
    // marked as billed
  } 
}

所以,这里我的系统正在测试中Invoice.我正在运行这个测试:

  public class InvoiceTest
  {
    @Test
    public void testInvoiceMarkedAsBilled()
    {
      Invoice sut = new Invoice();
      Invoice sutSpy = spy(sut);

      sut.createInvoice();

      // I want to verify that markInvoiceAsBilled() was called
    }
  }

这个例子只是一个实际代码看起来像的例子....

我的问题是mockito说你只能验证是否在模拟对象上调用了一个方法......但是我不想模拟这个对象,因为它是我测试的对象.我知道你可以监视你正在测试的对象,所以这就是我试过的:


  verify(sutSpy).markInvoiceAsBilled("57");

我想做的不可能吗?或者我只是以错误的方式去做?

感谢大家 :)

mat*_*t b 7

我不确定你试图做的是最好的办法.

我不会关心自己Invoice.createInvoice()调用一个内部的私有方法markInvoiceAsBilled()- 而是测试调用createInvoice()以你期望的方式改变Invoice对象的状态 - 即,status现在BILLED或类似的东西.

换句话说 - 不要测试调用哪些方法createInvoice()- 测试在调用此方法之后,对象的状态就是您所期望的.