Java Spock-如何测试不抛回异常的Catch()块

vxf3dgd4  于 2022-10-07  发布在  Java
关注(0)|答案(1)|浏览(198)

如何测试下面的Java Catch块,Catch()中的WHERE没有抛回异常。

class ErrorTransImpl {
  private static final Logger logger = Logger.getLogger(ErrorTransImpl.class);

  public int errorCatcher(ErrorTrans transError){
    int ct = 0;
    if (transError != null){
      String query = "INSERT INTO tab_1 (rw1,rw2,rw3,rw4,rw5) VALUES (?,?,?,?,?)";
      try {
        ct =  jdbcTemplate.update(query, new Object[] {transError.col1(),transError.col2(), transError.col3(),transError.col4(),transError.col5()});
      }catch (DataAccessException ex) {
        logger.error(ex);
      }
    }
    return ct;
  }
}

我尝试了如下测试,但:1>无法进入Catch块。2>即使在内部,也无法测试Catch(),因为它不会抛回异常。

def 'throw DataAccess Exception upon incorrect update'() {
  given:
  def log = Mock(Logger)
  def originalLogger = ErrorTransImpl.logger
  ErrorTransImpl.logger = log
  ErrorTransImpl errTransImpl = Spy() {
    jdbcTemplate >> {
      throw new DataAccessException() {
        @Override
        String getMessage() {
          return super.getMessage()
        }
      }
    }
  }

  when:
  errTransImpl.errorCatcher(new ErrorTrans())

  then:
  //            thrown DataAccessException
  //Not sure what to assert or test here ??
}

有谁能帮我测试一下这个吗?

jobtbby3

jobtbby31#

你需要测试行为

ct =  jdbcTemplate.update(query, new Object[] {transError.col1(),transError.col2(), transError.col3(),transError.col4(),transError.col5()});

失败了。或者,我自己也不太喜欢这样,您可以检查是否调用了logger.error()

相关问题