单元测试常见问题

最近写了不少单元测试,记录下感悟,以及常见问题

刚开始写的时候,还是挺难的,各种看不懂,写了几个就慢慢熟悉了,果然还是熟能生巧啊,主要的几种情况吧

我这边用的是mockito和junit

常见问题

  1. mock出来的对象不正常,是个null

    这说明你mock的方式不对,mock这个方法的时候,是需要参数类型严格对账,比如入参是一个String类型的,你不能直接any(),你要anyString(),
    比如类型是JsonObject类型的,你不能直接any(),你要any(JsonObject.class)

  2. static类型的方法mockito是可以mock的,只是需要mockito-inline
  3. mockito的doReturn()和when()的区别,一般来说大部分场景使用when足够了,但是某些场景,比如一个类里面的方法a调用方法b,就需要用到doReturn了
    • when(...).thenReturn(...):适合“外部依赖” + “mock 对象”
    • doReturn(...).when(...):适合“内部方法” + “spy 对象” + “避免副作用”
  4. 想要覆盖抛出异常的类的话,还是要使用dotthrow或者when thenThrow 甚至是直接使用异常 在测试类中try catch
  5. @RunWith(MockitoJUnitRunner.class) 和MockitoAnnotations.initMocks(this)一个意思,不需要重复调用

感悟

写单元测试感觉还是有点用的,能够最起码避免一些代码的错误,更熟悉代码逻辑,但是还是说只能是空闲时间写,因为写一次估计都要跑个好几次才能运行成功