单元测试

单元测试

好的单元测试必须遵守AIR 原则

  • A:Automatic(自动化)

  • I: Independent(独立性)

    不同的测试用例,必须使用独立的测试数据,关键的测试条件不能相同,避免使用 kdtId = 1, itemId = 1 这样的简单条件。

  • R: Repeatable(可重复) 单元测试重复执行时,必须保证内存、数据库、缓存中的数据已经清理。

单元测试必须是全自动的,非交互式的,必须使用assert 验证

保持单元测试的独立性。单元测试用例之间不能相互调用,不能依赖执行的先后顺序

单元测试是可以重复执行的,不能受到外界环境的影响。

新增代码及时补充单元测试,如果影响了原有的单测,及时修改(建议提测之前完成)

命名:

  • 类命名:被测试类名+Test
  • 方法命名:test_被测试方法名_操作预期

单元测试必须写在如下工程目录中: src/test/java,不允许写在业务代码目录下。
禁止通过在业务代码类中写 main 函数进行测试

单元测试的基本目标:行覆盖率80% 和条件覆盖率 70%,核心模块的行覆盖率和条件覆盖率 100%,必须设置阀值。

单元测试的BCDE 原则,保证被测模块的交付质量

  • B: Border,边界值测试,包括循环边界、特殊取值、特殊时间点、数据顺序等。
  • C:Correct,正确的输入,并得到预期结果。
  • D: Design,与设计文档结合,编写测试用例
  • E: Error,错误的信息输入,得到预期结果

注解

  • @RunWith:标识为JUnit的运行环境,运行器:MockitoJUnitRunner和PowerMockRunner

    Mockito提供了可读性较强、易于使用的mocking测试方法,而PowerMock提供了Mockito-like API是它使用方法基本与Mockito有很大类似,且它能解决静态方法、私有方法等“问题方法”

  • @SpringBootTest:获取启动类、加载配置,确定装载Spring Boot;
  • @Test:声明需要测试的方法;
  • @BeforeClass:针对所有测试,只执行一次,且必须为static void;
  • @AfterClass:针对所有测试,只执行一次,且必须为static void;
  • @Before:每个测试方法前都会执行的方法;
  • @After:每个测试方法前都会执行的方法;
  • @Ignore:忽略方法;
  • 注释@Mock来创建虚拟对象。对于被测class,使用@injectMocks进行注释即可

为什么要mock

Mock 测试就是在测试过程中,对于某些不容易构造(如 HttpServletRequest 必须在Servlet 容器中才能构造出来)或者不容易获取比较复杂的对象(如 JDBC 中的ResultSet 对象),用一个虚拟的对象(Mock 对象)来创建以便测试的测试方法。

比较

  • assertEquals
  • assertNotEquals
  • assertArrayEquals
  • assertFalse
  • assertTrue
  • assertNotNull
  • assertNull

你可能感兴趣的:(单元测试)