gpt4 book ai didi

java - Mockito 返回特定对象的值并抛出相同类型的所有其他对象

转载 作者:行者123 更新时间:2023-12-01 09:59:53 27 4
gpt4 key购买 nike

我有以下代码:

private SaveTransactionClient mockedTransactionClient;

private static Publisher publisher;

private static MyDTO mDTO1;
private static MyDTO mDTO2;
private static MyDTO mDTO3;

@BeforeClass
public void setUp() throws IOException {
TransactionResponse successResponse = new TransactionResponse();
successResponse.setDateRequest("2016-04-27 18:47:50");
successResponse.setResponse("OK");
successResponse.setTransactionNumber("1");

TransactionResponse failedResponse = new TransactionResponse();
failedResponse.setDateRequest("2016-04-27 18:47:50");
failedResponse.setResponse("Dublicate Transaction Error");
failedResponse.setTransactionNumber("1");

mDTO1 = new MyDTO(1, LocalDateTime.now(), 0);
mDTO2 = new MyDTO(2, LocalDateTime.now(), 0);
mDTO3 = new MyDTO(3, LocalDateTime.now(), 0);

mockedTransactionClient = mock(SaveTransactionClient.class);

when(mockedTransactionClient.sendTransactionRequest(mDTO1)).thenReturn(successResponse);
when(mockedTransactionClient.sendTransactionRequest(mDTO2)).thenReturn(failedResponse);
when(mockedTransactionClient.sendTransactionRequest(mDTO3)).thenThrow(new IOException());
when(mockedTransactionClient.sendTransactionRequest(any(MDTO.class))).thenThrow(new IOException());


publisher = new publisherImpl(mockedTransactionClient);
}

实际测试是

@Test
public void TestOnlyExceptionalPublishing() {
BlockingQueue<MDTO> mDTOs = new LinkedBlockingQueue<>(Arrays.asList(mDTO3));
assertEquals(mDTOs.size(), 1);

List<MDTO> successful = publisher.publish(wDTOs);

assertEquals(successful.size(), 0);
}

@Test
public void TestOneSuccessContainsExceptionalPublishing() {
BlockingQueue<MDTO> mDTOs = new LinkedBlockingQueue<>(Arrays.asList(mDTO3,mDTO1, mDTO2));
assertEquals(mDTOs.size(), 3);

List<MDTO> successful = publisher.publish(mDTOs);

assertEquals(successful.size(), 1);
}

现在,MDTO 是不可变的,publisher.publish(mDTO) 的工作方式是在发生异常时增加“重试”计数器在 MDTO 中并重试最多 3 次。当计数器增加时,会生成一个新的 MDTO ,而响应没有被 Mockito stub ,这给我带来了一个问题。我添加了 any 但这会使其他测试失败,因为它会抛出所有异常,而不是除了我已经提供的对象之外的任何其他测试。

在 Mockito 中是否有任何任何其他类型的方法可以做到这一点?

最佳答案

我认为(如果我理解正确的话)您正在寻找doAnswer/thenAnswer :

when(mockedTransactionClient.sendTransactionRequest(any(MyDTO.class)).thenAnswer(new Answer<TransactionResponse>() {
@Override
public TransactionResponse answer(final InvocationOnMock invocation) {
final MyDTO arg = invocation.getArgumentAt(0, MyDTO.class)
// do stuff here based on arg
return someTransactionResponse; // or throw some exception
}
});

关于java - Mockito 返回特定对象的值并抛出相同类型的所有其他对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36895924/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com