1

I've just started my very first toy-project in java and faced with misunderstanding of how it should be done. I'm using java.util.logging and JUnit4 library.

For example we have something like this:

public class SomeClass {
  private static Logger log = Logger.getLogger(SomeClass.class.getName());
  public static void SomeMethod() {
     try{
       ...some code...
     } catch(Exception e){
         log.warning("Something bad happened");
     }
  }

And the unit-test will be:

@Test
public void SomeClassTest(){
  SomeClass.SomeMethod();
}

But there will never be an exception, cause I've already handled it in method.

Should I generate new exception in catch-block? Or may be using junit combined with logging is not a good idea?

4

4 回答 4

3

从用户的角度来看,不抛出异常(并返回预期值(如果有))的方法意味着可以正常工作

因此,当您可以捕获异常并且该方法仍然可以正常工作时,您应该在方法中使用try - catch 记录日志(例如,当发生此错误但仍返回预期结果或执行假定的操作时,请执行其他操作)。

在这种情况下,单元测试应检查操作是否正确执行(如果对象处于预期状态并且结果值(在您的情况下为 void)是否正确

如果该方法在异常发生时不能执行它应该执行的操作,您应该重新抛出异常(通常不记录它,但这取决于)。

在这种情况下,单元测试应检查操作是否正确执行(如果对象处于预期状态并且结果值(在您的情况下为 void)是否正确,如果没有异常,如果有异常,则应检查如果预期会出现此异常

于 2013-08-14T07:32:50.880 回答
2

如果要测试是否引发了异常,则必须重新抛出或不捕获Exception.

否则,您可以class对异常发生后是否处于正确状态进行单元测试,即正确处理了异常。

我想说另一件事。不要 catch(Exception e),捕获您期望的特定异常。否则,您将以相同的方式处理其他意外的异常,这确实非常危险。

于 2013-08-14T07:31:13.313 回答
0

您可以简单地重新抛出捕获的异常:

public class SomeClass {
    private static Logger log = Logger.getLogger(SomeClass.class.getName());

    public static void SomeMethod() {
        try {
            // your stuff
        } catch (Exception e) {
            log.warning("Something happened");
            throw e;
        }
    }
}
于 2013-08-14T07:26:21.750 回答
0

我应该在 catch-block 中生成新的异常吗?

不,不要那样做!你可以测试你现有的代码!当您只想记录消息但不想在调用的方法中处理它时someMethod()不要抛出它!

将junit与日志记录结合使用不是一个好主意?

两者都是好主意,可以毫无问题地一起使用。

想想如何测试你的方法。我不会修改代码只是为了您可以轻松地测试它。因为你想捕获异常并记录是有原因的。

尝试验证您的测试方法中修改了哪些变量或对象

于 2013-08-14T07:32:24.780 回答