【问题标题】:Junit handle exception in try catch statementJunit 处理 try catch 语句中的异常
【发布时间】:2019-12-17 09:39:41
【问题描述】:

如何处理 Java 代码中的 try/catch 语句引发的异常? 在这种情况下使用 Junit 进行测试的最佳方法是什么?

这是我正在尝试使用的代码,欢迎任何改进:

try {
        sessionObj = buildSessionFactory().openSession();
        sessionObj.getTransaction().commit();
        return true;
    } catch(Exception sqlException) {
        if(null != sessionObj.getTransaction()) {
            sessionObj.getTransaction().rollback();
        }
        return false;
    } 

Junit 代码:

@Rule
public ExpectedException expectedException = ExpectedException.none();

@Test
public void throwsExceptionWithSpecificTypeAndMessage() {
    expectedException.expect(IllegalArgumentException.class);
    expectedException.expectMessage("sqlException");

    throw new IllegalArgumentException("sqlException");
}

【问题讨论】:

  • 你的测试没有测试任何东西。此外,您的方法不会抛出异常,因此您的测试毫无意义。
  • 我认为这个 stacklink 可能会对你有所帮助:stackoverflow.com/questions/31423643/try-catch-in-a-junit-test
  • @Quadrivics 怎么样?该方法不会抛出异常。
  • 我认为一个人不仅应该判断这个问题是否合理,而且即使你认为这个问题是无效的,也应该尝试告知这个人他的问题的答案。显然他错过了关于测试 try catch 语句的知识,在我提供的链接中,我找到了一个很好的解释。
  • @Quadrivics 不,你没有。那里解释的是如何测试要测试的方法抛出的异常。这不会发生在这里。

标签: java junit junit4


【解决方案1】:

Exception 是一个已检查的异常,您要么必须使用 try...catch 块捕获异常,要么声明异常。

@Test
public void someTest() throws Exception {
    // your code here
}

这样我们可以声明异常,如果发生异常,Junit 会打印堆栈跟踪。

或者

如果指定类的异常被方法抛出,则可以选择指定预期的 Throwable,以使测试方法成功。

 Class<? extends Throwable> org.junit.Test.expected()

@Test(expected = someException.class)
public void someTest() throws Exception {
    // your code here
}

【讨论】:

  • 您真的应该阅读问题和已经给出的 cmets。这不能回答 OP 的问题。这测试的是正在测试的方法是否抛出异常。被测试的方法永远不会抛出异常,所以你的测试总是会失败。他想要的是执行一个测试,在他正在测试的方法中,catch块将被执行,因此在try块中会抛出一个异常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-31
  • 2011-04-01
  • 1970-01-01
  • 2011-01-01
  • 2014-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多