最近写了些单元测试的内容,所以记录一下mockito,junit和单元测试相关的知识。
一个好的单元测试,应该脱离开对项目其他对象的依赖,能够在任何环境都可以运行(当然需要mockito等基础依赖)。
开发的单元测试和测试的测试的区别在于,开发人员需要明白其中的逻辑进行测试,测试则进行统一的测试。
首先现在自己的项目当中,添加mockito和junit的依赖。具体版本去网上找。
然后可以在test里面编写单元测试。
一个单元测试可以分为四部分。
第一部分是创建单元测试需要的mock对象
第二部分是创建mock对象内部的逻辑
第三部分是进行调用测试对象
第四部分是对结果进行检验
第一部分
可以通过 对象类型 实例名 = mock(对象类型.class)进行创建。
当然也可以通过@Mock注解进行创建
第二部分
利用when(触发条件).thenReturn(返回)进行对象逻辑的创建
第四部分是利用Junit的Assert进行验证
比如 assertTrue(条件) 如果里面的条件为true,那么就可以通过,不然抛出异常
assertFalse(条件)则恰恰相反,为false才可以通过
还有assertEqual(期望值, 未知值) 只有未知值等同于期望值才可以通过
下面还有很多的,但是通过名字就可以知道他的用处,所以不伸展
坑
当你使用泛型的时候,在第二部分可能会出现问题。
引用外网的一篇文章
public interface FooInterface { public Iterable<? extends SomeClass> getList(); ...}
public class Foo implements FooInterface { public List<SomeChildClass> getList() { ... } ...}
public class UnitTest { @Mock private FooInterface mockFoo; @Test public void someUnitTest() { ... List<SomeChildClass> testList = generateTestList(); when(mockFoo.getList()) .thenReturn(testList); }}
这样子看上去没什么问题,但是when(mockFoo.getList()) .thenReturn(testList);会发生报错Cannot resolve method 'thenReturn(List)
处理方法就是 doReturn(testList).when(mockFoo).getList();