gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:10:28 25 4
gpt4 key购买 nike

我正在尝试编写一个单元测试,需要确认是否调用了某个方法。我正在使用 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");

我想做的事情是不可能的吗?还是我只是用错了方法?

谢谢大家:)

最佳答案

我不确定您尝试做的事情是否是解决问题的最佳方式。

我不会关心验证 Invoice.createInvoice() 是否调用内部私有(private)方法 markInvoiceAsBilled() - 而是测试调用 createInvoice( ) 以您期望的方式更改 Invoice 对象的状态 - 即 status 现在是 BILLED 或类似的东西。

换句话说 - 不要测试 createInvoice() 调用了哪些方法 - 测试调用此方法后,对象的 state 是否符合您的预期.

关于java - 如何验证是否在被测系统上调用了方法(不是模拟),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12429157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com