Mockito:如何模拟方法,其结果取决于其参数之一?

Pat*_*tty 2 java spring mockito jooq

有没有办法将参数传递给模拟函数并在内部使用该参数值。示例(注意 name 作为 param):

Mockito.when(clientRepo.registerNewClient(Mockito.any(String.class) as name ))
    .then返回(
        dsl上下文
            .insertInto(客户端)
            .set(CLIENT.CLIENT_NAME,名称)
            。执行());

有没有办法做到这一点?

and*_*oss 5

您需要使用thenAnswer并从 中获取您的论点InvocationOnMock

final Repo clientRepo = Mockito.mock(Repo.class);
Mockito.when(clientRepo.registerNewClient(Mockito.any(String.class)))
    .thenAnswer(
        (Answer<Client>)
            invocationOnMock -> new Client(
                invocationOnMock
                    .getArgumentAt(0, String.class)
                    .toUpperCase()
            )
    );
Assertions.assertEquals(
    clientRepo.registerNewClient("fff"), new Client("FFF")
);
Run Code Online (Sandbox Code Playgroud)