单元测试与日志:给代码装上安全带
「我在自己电脑上是好的」——这句话在团队里几乎等于没说。测试和日志,让正确性可验证、问题可追溯。
JUnit 5 快速上手
pom.xml 加依赖(版本按 IDEA 提示或 Spring Initializr 常见即可):
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.10.2</version>
<scope>test</scope>
</dependency>
测试类放在 src/test/java:
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class CalculatorTest {
@Test
void add_shouldWork() {
assertEquals(8, Calculator.add(3, 5));
}
@Test
void divide_byZero_shouldThrow() {
assertThrows(IllegalArgumentException.class,
() -> Calculator.divide(1, 0));
}
}
运行测试:IDEA 绿色三角,或 mvn test。
测什么?
优先测:
- 纯逻辑(计算、校验、转换)
- 边界(空列表、0、最大值)
- 非法输入是否按预期失败
先别追求 100% 覆盖率,追求 关键路径有保护。
日志:比 System.out 正经
加 SLF4J + 简单实现(示例用 Logback 经典组合,入门也可先用 java.util.logging,但业界主流是 SLF4J):
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class StudentService {
private static final Logger log = LoggerFactory.getLogger(StudentService.class);
public void add(Student s) {
log.info("新增学生 name={}", s.getName());
// ...
}
}
级别直觉:
debug:开发细节info:关键业务节点warn:可恢复的异常情况error:失败需要关注
生产环境靠日志定位问题,而不是靠猜。
本周练习清单
写在最后
测试是对未来的投资。你会改代码,测试帮你守住「改完别塌」。
至此,语言 + 工程化基础 段落完成。下周开始进阶:泛型与面向接口的更深层用法。
YoungGc · Eden手记
学习是第一生产力。
如发现有错误欢迎指正,欢迎交流,接受反驳。 -- by不为 :)

浙公网安备 33010602011771号