gpt4 book ai didi

java - 如何在 Junit 测试中覆盖 catch block ?

转载 作者:行者123 更新时间:2023-11-30 06:43:06 24 4
gpt4 key购买 nike

我正试图将测试类(class)覆盖到 100%。但是,由于我无法测试 catch block ,所以我最多只能做到 90%。谁能告诉我如何覆盖 catch block 。

下面是我要测试的类:

public class UnsubscribeXmlTransformer {

public Map<String, Object> process(Map<String, Object> requestMap) {

String inputStream = requestMap.get(NeoConstants.INPUTSTREAM).toString();

Smooks smooks;
try {
smooks = new Smooks("Unsubscribe-smooks.xml");

JavaResult javaResult = new JavaResult();


smooks.filterSource(new StringSource(inputStream), javaResult);


UnsubscribeDetailsVO unsubscribeDetailsVO = (UnsubscribeDetailsVO) javaResult
.getBean("unsubscribeDetailsVO");

requestMap.put("unsubscribeDetailsVO", unsubscribeDetailsVO);

} catch (IOException | SAXException e) { }

return requestMap;
}

这是我的测试类:

public class UnsubscribeXmlTransformerTest {
Map<String, Object> requestMap = null;

@Before
public void prepareRequestMap() {
requestMap = new HashMap<>();
String inputStream = "some xml tags";

requestMap.put(NeoConstants.INPUTSTREAM, inputStream);
}


@Test
public void processTest() throws Exception {
UnsubscribeXmlTransformer ref = new UnsubscribeXmlTransformer();
Map<String, Object> result = ref.process(requestMap);

Assert.assertNotNull("Result is not null", result);
Assert.assertFalse("Result is not empty", result.isEmpty());
Assert.assertTrue("Result contains key named inputStream", result.containsKey(NeoConstants.INPUTSTREAM));
Assert.assertTrue("Result contains key named unsubscribeDetailsVO", result.containsKey("unsubscribeDetailsVO"));
Assert.assertTrue("Value with key unsubscribeDetailsVO is an instance of UnsubscribeDetailsVO", result.get("unsubscribeDetailsVO") instanceof UnsubscribeDetailsVO);
}

@Test(expected = IOException.class)
public void processTestForException() {
UnsubscribeXmlTransformer ref = new UnsubscribeXmlTransformer();

// how to cover
}
}

最佳答案

您可以在您的 requestMap 上使用 Mockito.spy,并在应该抛出异常时模拟案例。然后(如 jannis 所指出的)您可以使用 AssertJ 的流畅 API 来验证没有抛出异常(您在 catch 子句中将其静音),例如

@Test
public void process_shouldCatchException() throws Exception{
UnsubscribeXmlTransformer sut = new UnsubscribeXmlTransformer();
Map<String, Object> requestMap = Mockito.spy(new HashMap<>());
when(requestMap.put(eq("unsubscribeDetailsVO"), any()))
.thenThrow(IOException.class);
assertThatCode(() -> sut.process(requestMap))
.doesNotThrowAnyException();
}

关于java - 如何在 Junit 测试中覆盖 catch block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52438909/

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