有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将param传递给模拟类方法?

我正在使用mockito测试mu jdk11 springboot应用程序

我的应用程序有一个类'ClientRepository',它有一个名为'findById'的方法,该方法采用UUID类型的参数

所以这个方法看起来像:

 public String findById(UUID id)

现在我嘲笑这个班来测试:

@MockBean
private ClientRepository clientRepo;

现在,我想弄清楚如何在这里传递UUID参数:

 Mockito.when(clientRepo.findById(UUID id))
            .thenReturn(dslContext.selectFrom(CLIENT).where(CLIENT.ID.eq(UUID.fromString("3e064b19-ef76-4aea-bf82-e9d8d01daf1c"))).fetch());

有人能帮忙吗


共 (3) 个答案

  1. # 1 楼答案

    直接传递模拟预期返回的值也应该有效

    Mockito.when(clientRepo.findById(<expected UUID>)
        .thenReturn(dslContext.selectFrom(CLIENT).where(CLIENT.ID.eq(UUID.fromString("3e064b19-ef76-4aea-bf82-e9d8d01daf1c"))).fetch());
    
  2. # 2 楼答案

     Mockito.when(clientRepo.findById(Mockito.any(UUID.class))
                .thenReturn(dslContext.selectFrom(CLIENT).where(CLIENT.ID.eq(UUID.fromString("3e064b19-ef76-4aea-bf82-e9d8d01daf1c"))).fetch());
    

    如果你的模拟应该只对特定的值做出反应,那么就使用Mockito.eq("your-uuid-goes-here")

  3. # 3 楼答案

    可以使用以下构造:

    UUID expected = ...;
    Mockito.when(clientRepo.findById(Mockito.eq(expected))).thenReturn(...);
    

    如果预期的UUID与您在测试中配置的实例不同,这可能是一个很好的解决方案

    还有一点需要考虑:

    您似乎使用了JOOQ,但有一个用于存储库的模拟bean,这意味着您可能要测试某种服务(业务逻辑层)。 在这种情况下,您可能根本不需要使用数据库,只需创建一个字符串并返回模拟配置的thenReturn部分