首页 > 编程语言 >5-【JavaWeb】JUnit 单元测试及JUL 日志系统

5-【JavaWeb】JUnit 单元测试及JUL 日志系统

时间:2024-09-12 12:50:46浏览次数:12  
标签:logging JavaWeb 单元测试 JUL MyBatis java 日志 级别 properties

1. 使用 JUnit 进行单元测试

JUnit 是 Java 中非常流行的单元测试框架,MyBatis 与 JUnit 可以很好地结合,来测试持久层代码的正确性。

1.1 添加 JUnit 依赖

在使用 JUnit 之前,需要在 pom.xml 中引入 JUnit 依赖。

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13.2</version>
    <scope>test</scope>
</dependency>

1.2 单元测试基本结构

假设我们要测试 UserMapper 中的 getUserById 方法,测试代码如下:

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

import java.io.InputStream;

public class UserMapperTest {

    private SqlSessionFactory sqlSessionFactory;

    // 在测试开始前初始化 SqlSessionFactory
    @Before
    public void setup() throws Exception {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }

    // 测试获取用户的方法
    @Test
    public void testGetUserById() {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            UserMapper mapper = session.getMapper(UserMapper.class);
            User user = mapper.getUserById(1);
            
            // 断言用户不为空
            Assert.assertNotNull("用户不存在", user);
            
            // 断言用户名是否正确
            Assert.assertEquals("用户名不匹配", "Alice", user.getName());
        }
    }
}

1.3 运行测试

  • 每个 @Test 注解的方法代表一个测试用例。
  • 使用 @Before 注解的方法会在每个测试方法执行前运行,常用于初始化。
  • 使用 Assert 方法来验证测试结果,例如 Assert.assertNotNull() 检查对象是否为空,Assert.assertEquals() 检查预期结果是否与实际结果一致。

通过运行 JUnit 测试,你可以快速验证 MyBatis Mapper 的 SQL 执行是否正确。


2. 使用 JUL(Java Util Logging)日志系统

Java Util Logging (JUL) 是 Java 内置的日志系统。MyBatis 默认使用 JUL 作为日志输出工具,你可以通过配置来控制日志输出级别与格式。

2.1 配置 MyBatis 日志级别

MyBatis 可以输出执行的 SQL 语句、参数及结果等信息。首先,你需要在 mybatis-config.xml 中配置日志级别。

<configuration>
    <settings>
        <!-- 开启日志输出 -->
        <setting name="logImpl" value="JUL"/>
    </settings>
</configuration>
  • logImpl 属性指定日志实现,这里设置为 JUL,表示使用 Java 自带的日志系统。

2.2 配置日志属性文件

在项目的 resources 目录下创建 logging.properties 文件,配置日志输出格式和级别。

logging.properties 示例:

handlers= java.util.logging.ConsoleHandler

# 设置根日志级别
.level= INFO

# 控制台日志级别和格式
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

# MyBatis 日志级别
org.apache.ibatis.level = FINE
  • .level:设置根日志的默认级别,这里设为 INFO,表示输出普通信息及更高级别的日志。
  • org.apache.ibatis.level:将 MyBatis 的日志级别设置为 FINE,输出更详细的 SQL 日志。

2.3 常见日志级别

  • SEVERE:严重错误,可能导致程序崩溃的错误。
  • WARNING:警告信息,潜在问题。
  • INFO:普通信息,程序正常运行的相关消息。
  • CONFIG:配置信息,程序初始化时的信息。
  • FINEFINERFINEST:调试信息,显示程序细节,日志级别递增。

2.4 运行时日志输出

通过上面的配置,当你运行 MyBatis 程序时,日志会输出到控制台,并显示执行的 SQL 语句以及执行时间等。

示例日志输出:

INFO: PooledDataSource forcefully closed/removed all connections.
FINE: ==>  Preparing: SELECT * FROM users WHERE id = ? 
FINE: ==> Parameters: 1(Integer)
FINE: <==      Total: 1

日志中会显示 SQL 语句的准备状态、绑定的参数以及查询返回的记录数。

3. 使用 Properties 配置文件

Properties 文件是 Java 项目中常用的配置文件格式,用于配置一些可调整的参数,如数据库连接信息、日志级别等。在 MyBatis 中,properties 文件也可以用于配置日志系统。

3.1 配置文件示例

创建一个名为 application.properties 的文件,内容如下:

# 数据库配置
db.url=jdbc:mysql://localhost:3306/mydb
db.username=root
db.password=123456

# 日志配置
log.level=INFO

然后在 Java 代码中加载这个配置文件:

import java.io.InputStream;
import java.util.Properties;

public class ConfigLoader {

    public static Properties loadProperties(String fileName) {
        Properties properties = new Properties();
        try (InputStream input = ConfigLoader.class.getClassLoader().getResourceAsStream(fileName)) {
            properties.load(input);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return properties;
    }
}

通过 loadProperties 方法可以将配置文件加载到内存中,在程序中使用时可以动态获取这些配置。


4. 编写日志配置文件

为了使用 Java 内置的日志系统 JUL,你可以编写一个 logging.properties 文件,配置日志的输出格式、级别、输出位置等。这个配置文件通常放在 resources 目录下。

4.1 logging.properties 文件内容示例:

# 使用 ConsoleHandler 输出日志到控制台
handlers = java.util.logging.ConsoleHandler

# 全局日志级别
.level = INFO

# 控制台日志处理器的级别和格式
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

# MyBatis 日志配置
org.apache.ibatis.level = FINE
  • handlers:定义日志输出的处理器,这里我们使用 ConsoleHandler 将日志输出到控制台。
  • .level:定义默认的日志级别,INFO 表示输出一般信息。
  • org.apache.ibatis.level:为 MyBatis 特定包设置日志级别为 FINE,显示更详细的 SQL 执行信息。

4.2 使用 logging.properties

在应用启动时,你需要将 logging.properties 文件加载到日志系统中。可以通过以下方式加载:

import java.util.logging.LogManager;

public class LogConfig {

    static {
        try {
            LogManager.getLogManager().readConfiguration(
                    LogConfig.class.getClassLoader().getResourceAsStream("logging.properties"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

将此类放置在应用启动类中,它会自动读取日志配置文件。


5. 使用 Lombok 快速开启日志

Lombok 提供了一些注解来自动生成日志记录器,从而简化日志功能的使用。在 MyBatis 项目中,可以使用 Lombok 提供的注解快速开启日志记录。

5.1 添加 Lombok 依赖

pom.xml 文件中添加 Lombok 依赖:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.24</version>
    <scope>provided</scope>
</dependency>

5.2 使用 Lombok 的日志注解

Lombok 提供了多种日志注解,常用的有:

  • @Slf4j: 使用 SLF4J 日志框架
  • @Log: 使用 JUL 日志框架
  • @Log4j: 使用 Log4j 日志框架

在这里,我们使用 @Log 注解来使用 Java 自带的 JUL 日志系统:

import lombok.extern.java.Log;

@Log
public class MyService {

    public void performAction() {
        log.info("Performing some action...");
    }
}
  • @Log 自动生成了一个 log 对象,你可以直接使用 log.info()log.warning() 等方法记录日志。
  • 这样做的好处是,不需要手动创建日志记录器对象,Lombok 会自动帮你生成。

6. MyBatis 日志系统

MyBatis 提供了内置的日志系统,可以输出 SQL 语句的执行情况、参数绑定、返回结果等信息。MyBatis 支持多种日志框架,如 JUL、Log4j、SLF4J 等。你可以根据项目需要选择合适的日志框架。

6.1 配置 MyBatis 日志系统

MyBatis 默认支持多种日志实现方式,你可以通过 mybatis-config.xml 文件指定使用哪种日志系统。

<configuration>
    <settings>
        <!-- 配置 MyBatis 使用 JUL 作为日志框架 -->
        <setting name="logImpl" value="JUL"/>
    </settings>
</configuration>

6.2 查看 SQL 日志

在启用了 MyBatis 日志系统后,每当执行 SQL 语句时,控制台上会输出相关的日志信息。示例日志输出如下:

FINE: ==>  Preparing: SELECT * FROM users WHERE id = ? 
FINE: ==> Parameters: 1(Integer)
FINE: <==      Total: 1
  • Preparing:显示即将执行的 SQL 语句。
  • Parameters:显示 SQL 语句的参数绑定信息。
  • Total:显示查询返回的结果数。

6.3 使用 Log4j 或 SLF4J 作为日志系统

MyBatis 也支持其他日志系统,比如 Log4j 或 SLF4J。如果你想使用 Log4j,首先需要添加依赖:

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

然后修改 mybatis-config.xml 配置文件,设置 logImplLOG4J

<configuration>
    <settings>
        <!-- 使用 Log4j 作为日志系统 -->
        <setting name="logImpl" value="LOG4J"/>
    </settings>
</configuration>

总结

  • JUnit 单元测试:通过 JUnit 进行单元测试可以确保 MyBatis 的持久层代码正常工作,@Before@Test 是最常用的注解,Assert 方法用于验证测试结果。
  • JUL 日志系统:MyBatis 支持 Java 自带的日志系统 (JUL),你可以通过 logging.properties 文件配置日志的级别、格式和输出位置。
  • Properties 文件:可以通过 application.properties 文件配置数据库连接信息和日志级别,并通过 Java 代码加载这些配置。
  • 日志配置文件logging.properties 文件用于配置 JUL 日志系统,可以控制日志的输出级别、格式等。
  • Lombok 日志注解:使用 Lombok 的 @Log@Slf4j 等注解可以快速开启日志功能,简化日志代码的书写。
  • MyBatis 日志系统:MyBatis 支持多种日志框架,通过 mybatis-config.xml 可以指定日志实现,MyBatis 的日志系统会输出 SQL 的执行情况,方便调试。

标签:logging,JavaWeb,单元测试,JUL,MyBatis,java,日志,级别,properties
From: https://blog.csdn.net/weixin_44329069/article/details/142140116

相关文章

  • 6- 【JavaWeb】Maven管理项目
    ApacheMaven是一个流行的构建自动化工具,用于Java项目的构建、管理和依赖处理。Maven使用XML配置文件pom.xml来管理项目的构建过程和依赖关系。1.项目结构一个标准的Maven项目结构如下:my-maven-project/├──src/│├──main/││├──java......
  • 3-【JavaWeb】Lombok配置及使用方法介绍
    Lombok入门教程1.什么是Lombok?Lombok是一个帮助简化Java类中样板代码的Java库。比如,你经常会发现自己重复编写getter和setter方法、构造函数、toString()、equals()和hashCode()方法等。Lombok通过注解来自动生成这些代码,简化开发工作。2.Lombok安装步......
  • Javaweb之SpringBootWeb案例文件上传的详细解析
     2.文件上传在我们完成的新增员工功能中,还存在一个问题:没有头像(图片缺失)编辑上述问题,需要我们通过文件上传技术来解决。下面我们就进入到文件上传技术的学习。文件上传技术这块我们主要讲解三个方面:首先我们先对文件上传做一个整体的介绍,接着再学习文件上传的本地存储方式,最后......
  • 单元测试,Junit,反射,注解(元注解,自定义注解,解析注解),动态代理
    目录一、单元测试二、反射1.认识反射2.获取类3.获取类的构造器4.获取类的成员变量5.获取类的成员方法6.作用三、注解1.概述、自定义注解2.元注解3.注解的解析四、动态代理1.概述2.使用代理的好处一、单元测试单元测试就是针对最小的功能单元(方法),编写测试代码对......
  • Java中的负载测试:从单元测试到集成测试的完整覆盖策略
    Java中的负载测试:从单元测试到集成测试的完整覆盖策略大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们来聊一聊Java中的负载测试。负载测试是保证系统性能和稳定性的重要手段,而完整的测试策略不仅包括单元测试,还要覆盖到集成测试。本文将从单......
  • 基于JavaWeb开发的java eclipse+jsp+mysql+servlet+Spring的学生信息管理系统基础版
    基于JavaWeb开发的javaeclipse+jsp+mysql+servlet+Spring的学生信息管理系统基础版......
  • JavaWeb【day12】--(SpringBootWeb登录认证)
    案例-登录认证在前面的课程中,我们已经实现了部门管理、员工管理的基本功能,但是大家会发现,我们并没有登录,就直接访问到了Tlias智能学习辅助系统的后台。这是不安全的,所以我们今天的主题就是登录认证。最终我们要实现的效果就是用户必须登录之后,才可以访问后台系统中的功能。......
  • JavaWeb【day15】--(Maven高级)
    Maven高级Web开发讲解完毕之后,我们再来学习Maven高级。其实在前面的课程当中,我们已经学习了Maven。我们讲到Maven是一款构建和管理Java项目的工具。经过前面10多天web开发的学习,相信大家对于Maven这款工具的基本使用应该没什么问题了。我们掌握了Maven工具的基本......
  • 【待做】【JavaWeb】HTTP、Tomcat、Servlet
    一、JavaWeb框架及HTTP介绍二、IDEA+Tomcat集成快速构建JavaWeb项目2.1快速构建JavaWeb项目2.2IDEA集成本地Tomcat2.3IDEA配置Tomcat的Maven插件2.4项目打包后的目录结构三、Servlet执行流程及生命周期介绍3.1Servlet介绍及写个接口3.2Se......
  • JavaWeb开发01 - HTML+CSS
    浏览器内核对前端代码进行渲染解析,为确保解析效果一直制定web标准。Web标准也称为网页标准,由一系列的标准组成,大部分由W3C(WorldWideWebConsortium,万维网联盟)负责制定。由三个组成部分:HTML:负责网页的结构(页面元素和内容)。CSS:负责网页的表现(页面元素的外观、位置等页面样式......