当前位置: 首页 > 知识库问答 >
问题:

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

鲁城
2023-03-14

我试图编写一个单元测试,它需要确认是否调用了一个方法。我使用的是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
    }
  }

这个例子只是实际代码的一个例子....


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

我想做的是不可能的吗?还是我走错路了?

谢谢大家:)

共有1个答案

钱跃
2023-03-14

我不确定你试图做的事情是不是最好的解决办法。

我不关心验证Invoice.createinvoice()调用内部私有方法markinvoiceasbild()-而是测试调用createinvoice()以您所期望的方式更改发票对象的状态,即status现在是bild或类似的内容。

换句话说--不要测试createinvoice()调用了什么方法--测试调用这个方法后,对象的状态是否是您所期望的。

 类似资料:
  • 问题内容: 似乎模拟仅验证模拟对象的方法是否被调用,并且模拟对象始终具有类似以下内容的东西 但是我可以创建一个模拟对象并定义 然后验证另一个对象的方法是否被调用吗? 这是我想做的事情:我定义了一个模拟环境,无论发生什么情况都返回一个响应。但是然后我想验证在不同情况下调用anotherObj的不同方法。 怎么做? 问题答案: 您可以为此使用Mockito Spy。如果您设置为间谍,则可以验证该对象上

  • 我正在寻找一种方法来验证Mockito,在测试期间没有与给定的模拟进行任何交互。对于具有验证模式的给定方法,很容易实现这一点,但是我还没有找到完整模拟的解决方案。 我真正想要实现的是:在测试中验证,控制台上没有打印任何get。jUnit的总体思路如下: 一个有很多方法,我真的不想用单独的verify来验证每一个方法,对于。。。 所以我希望,如果有一个简单的解决方案,鉴于我有一个良好的测试覆盖率,我

  • 我正在测试路由器,有两个函数,我需要测试第一个函数是否被调用,第二个函数是否被调用。有方法

  • 我正在测试一个点对点应用程序,我可以向它发送网址,然后它应该向该网址发出请求。我可以用空手道模拟服务器模拟响应,但我也想验证请求是否已经发出。 我的一个想法是将每个到mock服务器的请求记录到一个文件中,然后在我的主要场景中(启动mock并将URL发送到应用程序)将其读回以进行验证。 还有更好的方法吗?我可以从创建模拟服务器的场景中访问模拟服务器的状态而不使用文件吗?我可以告诉模拟服务器验证它自己

  • 我在Apex中有一个触发器。如何编写检查触发器是否被调用的单元测试?

  • 我想为整个Kafka流编写一个集成测试。 在我的生产代码中,我有: 在我的测试代码中,我使用KafkaProducer 我希望有一个钩子,表明调用了KafkaListener。我可以在测试中加入一些延迟,但这是一个糟糕的做法,我想避免它。 有没有更好的方法来等待正在处理的?