Mockito 助你实现真正的单元测试

1. 扯犊子

话不多说,单元测试,知道的卅?

mock 数据? 也懂的卅?

好,上菜!!!

2. 一个字,干

业务逻辑说明: MockitoService 调用 MockitoDao, 需要对 service 进行测试

待测试代码:

MockitoService.java

@Service
public class MockitoService {
    
    @Autowired
    private MockitoDao mockitoDao;
    
    public String getData() {
        String data = mockitoDao.getData();
        return "service:" + data;
    }
}

MockitoDao.java

@Component
public class MockitoDao {

    /**
     * 获取数据
     * @return
     */
    public String getData() {
        // 具体实现不重要,反正都会 mock
        return "data";
    }

}

3. Mockito 闪亮登场

3.1. 引入依赖

<!-- https://mvnrepository.com/artifact/org.mockito/mockito-all -->
<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-all</artifactId>
    <version>1.10.19</version>
    <scope>test</scope>
</dependency>

3.2. 测试代码

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;

/**
 * Mockito 提供的 Runner
 * 
 * 如果不使用 MockitoJUnitRunner 而采用 Spring Runner,
 * 则需要添加 MockitoAnnotations.initMocks(this) 启用 Mockito 注解
 */
// Mockito 提供的 Runner
@RunWith(MockitoJUnitRunner.class)
public class MockitoServiceTest {

    // 注入 mock 对象,允许内部依赖 mock
    @InjectMocks
    MockitoService mockitoService;

    // mock 对象
    @Mock
    MockitoDao mockitoDao;

    @Before
    public void mockData() {
        // MockitoAnnotations.initMocks(this);
        
        // mock 行为
        Mockito.when(mockitoDao.getData()).thenReturn("mockito");
    }

    @Test
    public void getData() {
        String data = mockitoService.getData();
        Assert.assertEquals("service:mockito", data);
    }
}

3.4. 为啥是真正的单元测试

单元测试,顾名思义,咱们应该仅仅、只对某一块单元进行测试,最好是方法级别,顶多是类级别的测试。

如果超过了此规模,就不应该是单元测试的活了。 比如多个类之间的测试,应该交给 集成测试 来干。而不是,单元测试。

Mockito 通过提供 Runner 测试环境,通过 mock 掉类中依赖的其他资源(其他类、数据、第三方资源等),实现真正的单元测试。

并且,有着 Junit 4 的背书,perfect !!!

更多 Mockito 文档请骑上你可爱的小摩托,https://github.com/xhiteam/mockito-doc-zh

4. 参考

完整代码: https://github.com/LamboChen/demo/tree/master/mock

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章