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

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