第一章:单元测试

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 应用示例

  • 示例:
  1. package com.github.demo;
  2. /**
  3. * @author 许大仙
  4. * @version 1.0
  5. * @since 2021-10-08 12:15
  6. */
  7. public class Calculate {
  8. public int sum(int a, int b) {
  9. return a + b;
  10. }
  11. public int sub(int a, int b) {
  12. return a - b;
  13. }
  14. }
  1. package com.github.demo;
  2. import org.junit.Assert;
  3. import org.junit.Before;
  4. import org.junit.Test;
  5. /**
  6. * @author 许大仙
  7. * @version 1.0
  8. * @since 2021-10-08 12:15
  9. */
  10. public class CalculateTest {
  11. private Calculate c;
  12. @Before
  13. public void init() {
  14. this.c = new Calculate();
  15. }
  16. @Test
  17. public void testSum() {
  18. Assert.assertEquals(3, this.c.sum(1, 2));
  19. }
  20. @Test
  21. public void testSub() {
  22. Assert.assertEquals(-1, this.c.sub(1, 2));
  23. }
  24. }

第二章:日志技术

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

2.1.1 输出语句的弊端

  • ① 想要取消记录的信息,需要修改代码才能完成。
  • ② 信息只能展示在控制台,不能将其记录到其他的位置(文件、数据库等)。

2.1.2 日志

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

2.1.3 区别

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

2.2 日志技术的体系结构

日志体系结构.png

2.3 Log4j

  • Log4j 是 Apache 的一个开源项目。
  • 通过使用 Log4j ,我们可以控制日志信息输出的 目的地是控制台、文件 等位置。
  • 通过使用 Log4j ,我们可以 控制 每一条 日志输出格式
  • 通过使用 Log4j ,我们可以 定义 每一条 日志 信息的 级别 ,能够更加细致的控制日志的生成过程。
  • 上述的功能都可以通过一个 配置文件 来灵活的配置,而不需要修改应用的代码。

2.4 Log4j的入门

  • Log4j 的开发流程:
  • ① 导入 Log4j 相关的 jar 包Log4J相关jar包.zip
  • ② 编写 Log4j 的配置文件Log4J配置文件.zip
  • ③ 在代码中获取日志的对象。
  • ④ 按照级别设置记录日志信息。

  • 示例:

  • log4j.properties
  1. log4j.rootLogger=debug,my,fileAppender
  2. ### direct log messages to my ###
  3. log4j.appender.my=org.apache.log4j.ConsoleAppender
  4. log4j.appender.my.ImmediateFlush=true
  5. log4j.appender.my.Target=System.out
  6. log4j.appender.my.layout=org.apache.log4j.PatternLayout
  7. log4j.appender.my.layout.ConversionPattern=%d %t %5p %c{1}:%L - %m%n
  8. # fileAppender演示ʾ
  9. log4j.appender.fileAppender=org.apache.log4j.FileAppender
  10. log4j.appender.fileAppender.ImmediateFlush=true
  11. log4j.appender.fileAppender.Append=true
  12. log4j.appender.fileAppender.File=D:/log4j-log.log
  13. log4j.appender.fileAppender.layout=org.apache.log4j.PatternLayout
  14. log4j.appender.fileAppender.layout.ConversionPattern=%d %5p %c{1}:%L - %m%n
  • Log4jTest01.java
package com.github.demo2;

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

/**
 * @author 许大仙
 * @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,设定以怎么样的格式显示消息。

PatternLayout常用的选项.png