java - 如何在 Java 中结合日志记录和单元测试?

标签 java logging exception junit

我刚刚开始我的第一个 java 玩具项目,并且面临着应该如何完成的误解。我正在使用 java.util.logging 和 JUnit4 库。

例如我们有这样的东西:

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");
     }
  }

单元测试将是:

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

但是永远不会有异常(exception),因为我已经在方法中处理过了。

我应该在 catch block 中生成新的异常吗?或者可能将 junit 与日志记录结合使用不是一个好主意?

最佳答案

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

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

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

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

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

关于java - 如何在 Java 中结合日志记录和单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18225510/

相关文章:

java - 格式化 Java 日志记录

java - 数组索引越界 - 类名称约定

c# - 捕获唯一键违规的通用方法

java - 删除部分包名Android

java - Java中如何运行依赖类文件

php - 向 mysql 查询添加注释 (php -> mysql-db)

linux - 强制为 shell 脚本中的每个命令运行 `tee`?

c++ - std::runtime_error 是否复制构造函数中传递的字符串?

java - 是否有可用于 JXMonthView 的可遍历按钮的监听器?

java - 使用 Java 中的 Weka 进行基本文本分类