首页 > 其他分享 >单元测试

单元测试

时间:2022-08-20 19:45:06浏览次数:47  
标签:调用 外部 单元测试 依赖 测试 class 测试方法

  • 原则
    • Automatic
    • Isolation
    • Repeatable
  • 注解
    • @Test
      • expected——设置期望方法异常
      • timeout——设置方法超时时间
    • @BeforeClass——用于创建资源连接
    • @Parameter——用于指定输入变量和期望输出变量
    • @Before——用于每个测试方法前初始化
    • @After——用于每个测试方法后
    • @AfterClass——用于释放资源
    • @Ignore——忽略该测试方法
    • @RunWith(*.class)
    • @Rule——设置全局超时时间或期望异常
    • @Parameters——用于参数化测试时的数据集
    • @Suite.SuiteClasses(Test*.class...)——用于整合同模块的测试类
  • 参数化测试
    • 1. @RunWith(Parameterized.class)修饰测试类
    • 2. @Parameter修饰public 的输入/输出成员变量 或者 使用包含输入/输出成员变量的有参构造器
    • 3. @Parameters修饰public static 的数据集生成方法
    • 4. 在具体测试方法中使用,传入输入变量,assert输出变量与真实输出值
  • 异常测试
    • assertThrows(Ex.class, 测试方法)
    • try-catch(assert...)
    • @Test(expected =Ex.class)
    • 【推荐】@Rule public ExpectedException thrown = ExpectedException.none()
      • thrown.expect(Ex.class)
  • Mockito
    • 在做UT的时候,如果测试方法会引用很多外部依赖的对象,比如:远程数据库,网络通讯,远程服务, 文件系统,以及上述外部依赖的容器化部署,我们可能没法控制这些外部依赖:外部依赖的权限很高,或者外部依赖的启动成本很高,甚至外部依赖还未开发完成
    • 用Mock工具来模拟这些外部依赖的对象,完成UT
      • 本质上是使用拦截器隔离真实外部依赖
    • 常用注解
      • 1. @RunWith(MockitoJUnitRunner.class) 或者 在@Before里initMocks(this)
      • 2. @Mock修饰资源 或者 mock(资源.class)
      • 3. when(资源调用)—thenReturn/thenThrow(模拟真实输出)
        • thenXXX可以链式调用,对应多次调用行为的响应
        • 4. assert对比模拟值和期望值
        • 对于无返回值的资源操作,verify可以匹配调用行为
          • 匹配调用次数:verify(资源, freq).调用
          • freq可以是
            • times(n), 调用n次
            • never(),未调用
            • atLeast(n),至少调用n次
            • atMost(n),至多调用n次
            • 匹配调用顺序:inorder.verify(资源).调用
        • 使用参数匹配器anyXXX()可以忽略输入参数的具体值
          • 实现ArgumentMatcher的match方法以自定义参数匹配器
    • 对于构造器、私有方法、静态方法、单例,使用powerMock
  • 常见问题
    • 测试用例职责应该单一
    • 测试异常Case断言推荐使用@Rule
    • 测试异常Case不能只校验异常类型,同样要校验异常信息是否符合预期
    • 断言不准确,仅断言retCode,无响应内容的校验,用例未必符合预期
    • 用例没有执行业务方法,无效用例
    • UT仅测试正常流程,没有覆盖其他分支
    • 无断言用例, 无Assert
依赖真实环境,无法远程执行,执行效率低

标签:调用,外部,单元测试,依赖,测试,class,测试方法
From: https://www.cnblogs.com/rellik96/p/16593048.html

相关文章