【问题标题】:Integration Test for methods with no returning value in JavaJava中没有返回值的方法的集成测试
【发布时间】:2021-07-27 14:39:48
【问题描述】:

我正在尝试在 Java 中构建一个集成测试方法,但是有些服务方法没有返回值(void)。所以,在这个场景中,通常我会创建一个记录,然后使用创建记录的 id 检索该记录。但是,由于没有返回值,我该如何编写集成测试,例如这种服务方法?这可能吗?

public void saveProperties(final Request request, final UUID productUuid) {
    repository.saveProduct(request, productUuid);
}

【问题讨论】:

  • 是否可以为此方法构建集成测试?
  • '所以,在这个场景中,通常我会创建一个记录,然后使用创建记录的 id 检索该记录。' - 这个场景有什么不同? productUuid 不是你可以通过它检索产品吗?
  • @crizzis 当我在测试方法中调用saveProperties 时,它不会返回任何内容。那么,我该如何使用productUuid
  • 我不确定我是否理解。您使用某些参数调用savePropertiesproductUuid 就是其中之一。然后您不能使用与方法调用相同的productUuid 来检索产品(repository.findByProductUuid()entityManager.createQuery("SELECT p FROM Product p WHERE p.uuid = :uuid").getSingleResult() 或您可用的任何其他方法)来检索产品并检查它是否已正确保存?
  • 另外,没有什么可以阻止您返回创建/更新产品的 ID 以进行测试。您可以在生产代码中忽略它并在测试代码中使用它

标签: java spring testing junit integration-testing


【解决方案1】:

您实际上可以使用 Mockito.verify 验证服务方法是否被调用。

示例用法:

Mockito.verify(mockedObject, Mockito.times(1)).saveProduct(any(Request.class), any(UUID.class));

这将验证 saveProduct 是否已在您的模拟对象上调用。

【讨论】:

    猜你喜欢
    • 2015-02-15
    • 2022-01-03
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多