gpt4 book ai didi

java - ResourceAccessException 内 SocketTimeout 异常的 Junit 代码覆盖率

转载 作者:行者123 更新时间:2023-12-01 21:24:15 26 4
gpt4 key购买 nike

我的目标是获得 Adapter 类的代码覆盖率。我已经为 read SocketTimeoutException(read timed out) 编写了 Junit 测试用例,它没有调用 getSampleStatus() 方法。如何从我的测试类中调用此 getSampleStatus()。

rest class:
===========

class MyAdapter
{

@Autowired
BDSRequestForSubmitGIApp bdsRequestForSubmitGIApp;

@Autowired
RestTemplate restTemplate;


public BDSSubmitResponse submitGIApplicationToBDS(String channelId,String customerId,String cinSuffix, String countryCode) throws CrossSellOffersException {
BDSSubmitResponse bdsSubmitResponse = null;
try {

bdsSubmitResponse = restTemplate.postForObject(env.getProperty("bds_submit_gi_url"),
bdsRequestForSubmitGIApp, BDSSubmitResponse.class);

} catch (ResourceAccessException e) {
if (e.getCause().getClass().equals(SocketTimeoutException.class)) {
retrun getSampleStatus();// Junit is not covering this line
} else {
throw new CrossSellOffersException("DOMAIN_CONNECT_FAILURE",
"Couldn’t contact domain sub-system(s). Please try after some time.");
}
}
return bdsSubmitResponse;
}

private BDSSubmitResponse getSampleStatus(){
//business logic
}
}


Junit :
=======

@RunWith(MockitoJUnitRunner.class)
class MyAdapterTest
{
@InjectMocks
private MyAdapter crossSellOffersBDSAdapter;

@Mock
private RestTemplate restTemplate;

@Mock
BDSRequestForSubmitGIApp bdsRequestForSubmitGIApp;

@Test
public void submitGIApplicationToBDSReadTimeoutTest() throws Exception {
final String ERROR_MESSAGE =
"I/O error on POST request for \"https://message-publisher.uat.apps.cs.sgp.dbs.com/message\": Read timed out; nested exception is java.net.SocketTimeoutException: Read timed out";
Mockito.when(env.getProperty("bds_submit_gi_url")).thenReturn("https://message-publisher.uat.apps.cs.sgp.dbs.com/message");
Mockito.when(restTemplate.postForObject(env.getProperty("bds_submit_gi_url"),
bdsRequestForSubmitGIApp, BDSSubmitResponse.class)).thenThrow(new ResourceAccessException(ERROR_MESSAGE));

BDSSubmitResponse response = crossSellOffersBDSAdapter.submitGIApplicationToBDS(requestBody, "MBSG", "S9718016D", "00");
}
}

如何获取 getSampleStatus() 方法的代码覆盖率?

最佳答案

org.springframework.web.client 包中存在的 ResourceAccessException 类及其构造函数是ResourceAccessException(字符串消息)ResourceAccessException(String msg, IOException ex)

下面的测试用例适用于 ResourceAccessException

@Test(expected = CrossSellOffersFulFilmentException.class)
public void submitGIApplicationToBDSExceptionTest() throws Exception {
//Given
final String ERROR_MESSAGE = "ResourceAccessException";
IOException exception = new IOException("IO exception");

//When
Mockito.when(env.getProperty("bds_submit_gi_url")).thenReturn("https://message-publisher.uat.apps.cs.sgp.dbs.com/message");
Mockito.when(restTemplate.postForObject(env.getProperty("bds_submit_gi_url"),
bdsRequestForSubmitGIApp, BDSSubmitResponse.class)).thenThrow(new ResourceAccessException(ERROR_MESSAGE, exception));

//Then
crossSellOffersBDSAdapter.submitGIApplicationToBDS(requestBody, "MBSG", "S9718016D", "00");
}

关于java - ResourceAccessException 内 SocketTimeout 异常的 Junit 代码覆盖率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58837798/

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