gpt4 book ai didi

java - 如何使用 PowerMockito 捕获/抛出异常

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

我正在为一个不抛出异常的方法编写 JUnit 测试用例,但该方法调用会抛出 ParseExceptionparse() 方法我需要捕获它。我创建了一个测试用例,其中传递了无效的日期格式,在调试过程中它进入解析方法,然后进入 catch block ,但是如何在测试用例中显式抛出 ParseException ,然后比较日志中的字符串。希望我说清楚了。

正在测试的方法。

public static String convertUTC( String strDate, String inputFormat, String outputFormat ) {
String displayDateString = null;

try {
DateFormat inFormat = new SimpleDateFormat( inputFormat );
inFormat.setTimeZone( TimeZone.getTimeZone( "UTC" ) );
Date date = inFormat.parse( strDate );

DateFormat outFormat = new SimpleDateFormat( outputFormat );
outFormat.setTimeZone( TimeZone.getDefault() );

displayDateString = formatDate(date, outputFormat);
} catch ( ParseException pe ) {
log.error( "DateUtil.convertUTC :Parse exception while parsing,"+strDate+" using format :"+inputFormat) ;
}

return displayDateString;
}

JUnit

@Test
public void testConvertUTCParseException() {
String incomingDate = "2012-08-15T22:56:02.038Z";
String inputFormat = "MM/dd/yy hh:mm a z";
String outputFormat = "MM/dd/yy hh:mm a z";

assertEquals( null, DateUtils.convertUTC( incomingDate, inputFormat, outputFormat ) );
}

除了上面的测试用例之外,我想使用 PowerMockito 显式抛出 ParseException 并在日志中执行断言以比较文本。我不能这样做的原因是因为 converUTC 不会抛出 ParseException。

我假设这会引发异常,但是我如何比较日志中的文本?

@SuppressWarnings("unchecked")
@Test
public void testCaughtParseException() throws Exception {
PowerMockito.mockStatic( DateUtils.class );
PowerMockito.when( DateUtils.convertUTC( Mockito.any( String.class ), Mockito.any( String.class ), Mockito.any( String.class ) ) ).thenThrow( ParseException.class );
}

谢谢。

最佳答案

老实说你的测试用例

public void testCaughtParseException() throws Exception

这里没有多大意义,因为我们已经在这里进行了尝试和捕获。如果从方法中抛出 parseException,那么编写这样的测试用例是有意义的。在您的情况下,我想做的是检查 log.error 是否在日期不正确的情况下被调用。

所以,我建议你使用Mockito的验证。这对于您的测试用例来说已经足够了。

关于java - 如何使用 PowerMockito 捕获/抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44442419/

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