Mockito 配合 Junit 进行单元测试(Cannot resolve method 'thenReturn‘)

4,567 阅读2分钟

最近写了些单元测试的内容,所以记录一下mockito,junit和单元测试相关的知识。

一个好的单元测试,应该脱离开对项目其他对象的依赖,能够在任何环境都可以运行(当然需要mockito等基础依赖)。

开发的单元测试和测试的测试的区别在于,开发人员需要明白其中的逻辑进行测试,测试则进行统一的测试。

首先现在自己的项目当中,添加mockito和junit的依赖。具体版本去网上找。

然后可以在test里面编写单元测试。

一个单元测试可以分为四部分。

第一部分是创建单元测试需要的mock对象

第二部分是创建mock对象内部的逻辑

第三部分是进行调用测试对象

第四部分是对结果进行检验

第一部分

可以通过 对象类型 实例名 = mock(对象类型.class)进行创建。

当然也可以通过@Mock注解进行创建

第二部分

利用when(触发条件).thenReturn(返回)进行对象逻辑的创建

第四部分是利用Junit的Assert进行验证

比如 assertTrue(条件) 如果里面的条件为true,那么就可以通过,不然抛出异常

assertFalse(条件)则恰恰相反,为false才可以通过

还有assertEqual(期望值, 未知值) 只有未知值等同于期望值才可以通过

下面还有很多的,但是通过名字就可以知道他的用处,所以不伸展

当你使用泛型的时候,在第二部分可能会出现问题。

引用外网的一篇文章

dzone.com/articles/mo…

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();