能否使用try-catch为抛出IllegalStateException的代码编写单元测试
问题解答
完全可以使用try-catch为这段代码编写单元测试,这是校验逻辑是否按预期抛出异常的通用常规实现方式。
待测试逻辑
if (currentAZ == null) { throw new IllegalStateException("Cannot fetch Current AZ information."); }
实现思路
- 首先构造
currentAZ为null的测试前置场景,保证这段校验逻辑可以被触发 - 用try代码块包裹包含上述校验逻辑的方法调用
- 若try块内代码执行完成没有抛出异常,主动触发测试失败,避免漏判
- 在catch块中捕获预期的
IllegalStateException,同时校验异常提示信息是否符合预期
参考代码示例(基于JUnit)
@Test public void testCheckCurrentAZIsNullThrowsException() { // 构造currentAZ为null的测试环境 yourTestInstance.setCurrentAZ(null); try { // 调用包含上述校验逻辑的业务方法 yourTestInstance.yourBizMethod(); // 未抛出预期异常,标记测试失败 org.junit.Assert.fail("预期抛出IllegalStateException,但实际未抛出任何异常"); } catch (IllegalStateException e) { // 校验异常信息是否符合预期 org.junit.Assert.assertEquals("Cannot fetch Current AZ information.", e.getMessage()); } }
补充说明
除了try-catch的写法外,多数单元测试框架也提供了更简洁的异常断言语法,比如JUnit5的assertThrows、AssertJ的异常断言API等,但try-catch写法不依赖框架额外特性,兼容性最高,逻辑也更直观易懂。
内容的提问来源于stack exchange,提问作者ARP
相关产品推荐
相关产品推荐

