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

如何测试使用Mockito更新数据的方法?

尹正奇
2023-03-14

我想测试一个当前数据的方法,使用id指示它应该是什么类型的记录,并“替换”数据。

我写了一个测试方法的开头,但我在某个点上卡住了,例如,我不知道如何正确实现断言以使测试通过。

服务

public Invoice updateInvoice(Long invoiceId, Invoice invoiceDetails) {
        Invoice invoice= new Book();
        Invoice.setName(invoiceDetails.getName);
        Invoice.setPrize(invoiceDetails.getPrize);
        Invoice.setDate(invoiceDetails.getDate);
        
        return invoiceRepository.save(invoice);
    }

控制器

@PutMapping("/invoices/{invoiceId}")
    public Invoice updateInvoice(@PathVariable(value = "invoiceId") Long id, @RequestBody invoiceDetails) {
        return  invoiceService.updateInvoice(id, invoiceDetails);
    }

测试方法(发票1是一个示例对象,其中包含构造函数传递的数据以测试更新记录)这就是我停下来的地方,因为我不知道如何做出断言来理解它

@Test
    void shouldUpdateInvoice() {
       
       Invoice updateInvoice = new Invoice(1, "firstInvoice", 30, "2000-01-01");
       Mockito.when(invoiceRepository.findById(invoice1.getId())).thenReturn(Optional.of(invoice1));
       Mockito.when(invoiceRepository.save(updateInvoice)).thenReturn(updateInvoice);
   }

共有1个答案

邹英光
2023-03-14

您需要在invoiceRepository上添加验证。拯救

verify(invoiceRepository, times(1)).save(any());

并可能删除

Mockito.when(invoiceRepository.save(updateInvoice)).thenReturn(updateInvoice);

如果您想查看您的更新是否正确,您可以使用这样的ArgumentCaptor

.....
@Captor
private ArgumentCaptor<Invoice> invoiceCaptor;
....

....
verify(invoiceRepository, times(1)).save(invoiceCaptor.capture()); 
Invoice invoice = invoiceCaptor.getValue(); // invoice references the object that was put in the mock in the method "save("
assertThat(invoice.getPrize(), is(1234)); // custom assertions here
...
 类似资料:
  • 问题内容: 我已经开始发现Mockito库,并且有一个我没有找到正确答案的问题。 例如,如果我的UserDAO类中有将用户保存到数据库中的此类方法: 我应该如何测试? 如果我想测试一个DAO类,那么我需要创建一个模拟,模拟,模拟等吗?如此不测试数据库本身? 但是,如果我还想测试dao和数据库的行为怎么办? 您能否提供一些代码示例,可能有用的链接,并显示实现此目的的最佳方法? 问题答案: 这是使用M

  • 我有一个类需要进行单元测试: 我有一个测试用例: 当我运行测试用例时,没有使用ActiveMQConnectionFactory的模拟对象。相反,正在使用实际的实现,并且正在建立TCP连接: 我尝试了Powermockito和Mockito,但都失败了。如何模拟对象,如何成功运行测试用例? 我是单元测试新手,试图从各个社区获得帮助,但没有找到合适的答案。任何帮助都将不胜感激。谢谢

  • 我有一个简单的类,但带有匿名代码块。我需要用测试来覆盖这门课。 和测试: 注释行不工作。日志:需要但未调用:dao.DeleteAllByStatusAndDate(,isA(java.util.date));->在com.nxsystems.dw.publisher.handler.CleanerTaskTest.SuccessfulScenario(CleanerTaskTest.java:5

  • 问题内容: 我对Java单元测试非常陌生,听说Mockito框架对于测试非常有用。 我已经开发了一个REST Server(CRUD方法),现在我想对其进行测试,但是我不知道如何? 我什至不知道该测试程序应该如何开始。我的服务器应该在本地主机上运行,​​然后在该URL上进行调用(例如,本地主机:8888)? 这是我到目前为止尝试过的方法,但是我很确定这不是正确的方法。 这是方法的代码。 在此测试用

  • 我有以下代码 我对嘲笑不熟悉。我有以下疑问。我正在尝试测试公共方法。 我是否可以断言私有变量workDone的值? 是否可以验证超类中的方法调用? 如何在方法中模拟私有方法调用?

  • 我希望能够测试一条从队列中消耗的路由,然后在涉及spring注入服务的bean中进行一些工作,并使用mockito有效地模拟该服务。 我的Spring路线如下: emailService bean有一个自动连接的服务,然后在createEmailRequest()中调用该服务,该服务将转到另一个服务并检索用户数据以供后续使用。 测试: bean如下: 所有编译都正常,当运行路由时,队列上弹出一个对