目 录CONTENT

文章目录

从0开始学Java——单元测试和日志技术(19)

Eric
2022-01-23 / 0 评论 / 0 点赞 / 154 阅读 / 2,254 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2023-12-12,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1 单元测试

1.1 Junit概述

  • Junit是Java语言编写的第三方单元测试框架。

1.2 Junit的特点

  • ① Junit是一个开放源代码的测试工具。

  • ② Junit提供注解来识别测试方法。

  • ③ Junit测试可以让我们编写代码更快,并且能提高代码质量。

  • ④ Junit优雅简洁。

  • ⑤ Junit在一个条中显示进度,如果运行良好显示绿色;如果运行失败显示红色

1.3 单元测试概念

  • 单元:在Java中,一个类就是一个单元。

  • 单元测试:程序员编写一小段代码,用来对某个类中的某个方法进行功能测试或业务逻辑测试。

1.4 Junit的使用步骤

  • ① 将Junit的jar包导入到工程中。

  • ② 编写测试方法(测试方法必须是public的,且没有参数,没有返回值的非静态方法)。

  • ③ 在测试方法上使用@Test注解标注该方法是一个测试方法。

  • ④ 选中测试方法右键通过junit运行该方法。

1.5 Junit的常用注解

1.5.1 Junit 4.x

  • @Before:用来修饰方法,该方法会在每一个测试方法之前执行一次。

  • @After:用来修饰方法,该方法会在每一个测试方法之前之后执行一次。

  • @BeforeClass:用来修饰静态方法,该方法会在所有测试方法之前执行一次。

  • @AfterClass:用来修饰静态方法,该方法会在所有测试方法之后执行一次。

1.5.2 Junit 5.x

  • @BeforeEach:用来修饰方法,该方法会在每一个测试方法之前执行一次。

  • @AfterEach:用来修饰方法,该方法会在每一个测试方法之前之后执行一次。

  • @BeforeAll:用来修饰静态方法,该方法会在所有测试方法之前执行一次。

  • @AfterAll:用来修饰静态方法,该方法会在所有测试方法之后执行一次。

1.6 应用示例

  • 示例:
package com.github.demo;

/**
 * @author open1024
 * @version 1.0
 * @since 2021-10-08 12:15
 */
public class Calculate {

    public int sum(int a, int b) {
        return a + b;
    }

    public int sub(int a, int b) {
        return a - b;
    }
}
package com.github.demo;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

/**
 * @author open1024
 * @version 1.0
 * @since 2021-10-08 12:15
 */
public class CalculateTest {

    private Calculate c;

    @Before
    public void init() {
        this.c = new Calculate();
    }

    @Test
    public void testSum() {
        Assert.assertEquals(3, this.c.sum(1, 2));
    }

    @Test
    public void testSub() {
        Assert.assertEquals(-1, this.c.sub(1, 2));
    }
}

2 日志技术

2.1 日志技术和输出语句的区别

2.1.1 输出语句的弊端

  • ① 想要取消记录的信息,需要修改代码才能完成。

  • ② 信息只能展示在控制台,不能将其记录到其他的位置(文件、数据库等)。

2.1.2 日志

  • 生活中的日志:生活中的日志就好比日记,可以记录生活中的点点滴滴。

  • 程序中的日志:程序中的日志可以记录程序在运行的时候的点点滴滴,并可以进行永久存储。

2.1.3 区别

输出语句日志技术
取消日志需要修改代码,灵活性较差不需要修改代码,灵活性较好
输出位置只能是控制台可以将日志信息写入到文件或数据库中
多线程和业务代码处于一个线程中多线程方式记录日志,不影响业务代码的性能

2.2 日志技术的体系结构

img

2.3 Log4j

  • Log4j是Apache的一个开源项目。

  • 通过使用Log4j,我们可以控制日志信息输出的目的地是控制台、文件等位置。

  • 通过使用Log4j,我们可以控制每一条日志输出格式

  • 通过使用Log4j,我们可以定义每一条日志信息的级别,能够更加细致的控制日志的生成过程。

  • 上述的功能都可以通过一个配置文件来灵活的配置,而不需要修改应用的代码。

2.4 Log4j的入门

  • Log4j的开发流程:

  • ① 导入Log4j相关的jar包📎Log4J相关jar包.zip

  • ② 编写Log4j的配置文件📎Log4J配置文件.zip

  • ③ 在代码中获取日志的对象。

  • ④ 按照级别设置记录日志信息。

  • 示例:

  • log4j.properties

log4j.rootLogger=debug,my,fileAppender
### direct log messages to my ###
log4j.appender.my=org.apache.log4j.ConsoleAppender
log4j.appender.my.ImmediateFlush=true
log4j.appender.my.Target=System.out
log4j.appender.my.layout=org.apache.log4j.PatternLayout
log4j.appender.my.layout.ConversionPattern=%d %t %5p %c{1}:%L - %m%n
# fileAppender演示ʾ
log4j.appender.fileAppender=org.apache.log4j.FileAppender
log4j.appender.fileAppender.ImmediateFlush=true
log4j.appender.fileAppender.Append=true
log4j.appender.fileAppender.File=D:/log4j-log.log
log4j.appender.fileAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.fileAppender.layout.ConversionPattern=%d %5p %c{1}:%L - %m%n
  • Log4jTest01.java
package top.open1024.demo2;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @author open1024
 * @version 1.0
 * @since 2021-10-08 13:36
 */
public class Log4jTest01 {
    // 使用Slf4j中的API来获取日志的对象
    // 好处:如果以后我们需要更换日志的实现,那么下面的代码不需要随之修改
    // 推荐使用
    private static Logger LOGGER = LoggerFactory.getLogger(Log4jTest01.class);

    public static void main(String[] args) {
        LOGGER.debug("debug级别的日志");
        LOGGER.info("info级别的日志");
        LOGGER.warn("warn级别的日志");
        LOGGER.error("error级别的日志");
    }
}

2.5 Log4j的组成

  • Loggers:记录器,日志的级别。

    • Loggers组件在系统中常见的5个级别:debug、info、warn、error、fatal。
    • debug < info < warn < error < fatal。
    • Log4j有一个规则:只输出级别不低于设定级别的日志信息。换言之,如果设置的日志级别是info,那么只能输出info、warn、error和fatal级别的日志信息。
  • Appenders:输出源,日志要输出的地方,比如控制台(console)、文件(files)等。

    • org.apache.log4j.ConsoleAppender:控制台。
    • org.apache.log4j.FileAppender:文件。
log4j.appender.ca=org.apache.log4j.ConsoleAppender
log4j.appender.ca.设置1=值1
log4j.appender.ca.设置2=值2
log4j.appender.ca.设置3=设置3
log4j.appender.ca.设置4=设置4
...
log4j.appender.ca.设置n=设置n
  • Layouts:布局,可以根据自己的洗好规定日志输出的格式

    • 常见的布局管理器:
      • org.apache.log4j.PatternLayout(可以灵活地指定布局模式),常用。
      • org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
      • org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)
log4j.appender.ca.layout=org.apache.log4j.PatternLayout
log4j.appender.ca.layout.设置1=值1
log4j.appender.ca.layout.设置2=值2
log4j.appender.ca.layout.设置3=设置3
log4j.appender.ca.layout.设置4=设置4
...
log4j.appender.ca.layout.设置n=设置n

2.6 Log4j的配置文件

2.6.1 配置文件示例

log4j.rootLogger=debug,ca,fileAppender # 根Logger

log4j.appender.ca=org.apache.log4j.ConsoleAppender
log4j.appender.ca.ImmediateFlush=true
log4j.appender.ca.Target=System.out
log4j.appender.ca.layout=org.apache.log4j.PatternLayout
log4j.appender.ca.layout.ConversionPattern=%d %t %5p %c{1}:%L - %m%n

2.6.2 配置根Logger

  • 格式:
log4j.rootLogger=-日志级别,appenderName1,appenderName2,appenderName3,...
  • 日志级别:

    • off、debuginfowarnerror、fatal、all或者自定义的级别。
  • appenderName1:就是指定日志信息要输出到哪里。可以同时指定多个输出目的地,用逗号隔开。如:log4j.rootLogger=INFO,ca,fa

2.6.3 配置appender

log4j.appender.ca=org.apache.log4j.ConsoleAppender
log4j.appender.ca.ImmediateFlush=true
log4j.appender.ca.Target=System.out
  • log4j.appender.ca:

    • org.apache.log4j.ConsoleAppender:向控制台输出。
    • org.apache.log4j.FileAppender:向文件输出。
  • ConsoleAppender的常用选项:

    • ImmediateFlush=true:表示所有的消息被立即输出,设置为false则不输出,默认值为true。
    • Target=System.err:默认是System.out。
  • FileAppender的常用选项:

    • ImmediateFlush=true:表示所有的消息被立即输出,设置为false则不输出,默认值为true。
    • Append=true:true表示将消息添加到指定文件中,原来的消息不覆盖;false则将消息覆盖指定的文件内容,默认值为true。
    • File=D:/log4j-log.log:指定消息输出到log4j-log.log文件中。

2.6.4 配置layout

log4j.appender.ca.layout=org.apache.log4j.PatternLayout
log4j.appender.ca.layout.ConversionPattern=%d %t %5p %c{1}:%L - %m%n
  • log4j.appender.ca.layout:

    • org.apache.log4j.PatternLayout(可以灵活地指定布局模式),常用
    • org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)。
    • org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)。
  • PatternLayout的常见选项:

    • ConversionPattern=%d %t %5p %c{1}:%L - %m%n,设定以怎么样的格式显示消息。

img

0

评论区