[系列] Mockito 快速入門

1. 簡介

在這篇文章中咱們將經過【新增用戶】用例,講解 Mockito 框架的基本使用,以及與 Junit5 測試框架的集成。html

2. Maven 依賴

2.1. 關鍵依賴

  • junit-jupiter-engine:5.6.2
  • mockito-core:3.9.0java

    <dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <version>5.6.2</version>
    <scope>test</scope>
    </dependency>
    <dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>3.9.0</version>
    <scope>test</scope>
    </dependency>

    2.2 Mockito Extension

    JUnit5 中須要添加 mockito-junit-jupiter:3.6.28 依賴,用於支持 MockitoExtensionsegmentfault

    <dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-junit-jupiter</artifactId>
    <version>3.6.28</version>
    <scope>test</scope>
    </dependency>

    3. 待測試用例【新增用戶】

    業務代碼

    UserServiceImpl 類負責具體的業務邏輯實現,其經過調用 UserDao 的 insert 方法,將用戶信息持久化到 DB。
public interface UserService {
    boolean save();
}

public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao userDao;
    @Override
    public boolean save() {
        boolean result = userDao.insert();
        return result;
    }
}

public class UserDao {
    public boolean insert() {
        System.out.println("user insert success");
        return true;
    }
}

4. 建立測試代碼

4.1. 測試思路

TODO...框架

4.2. 關鍵步驟:

  1. 新增測試類 UserServiceTest
  2. 新增測試方法 testSaveUser_Default_Success
  3. UserServiceTest 類添加 @ExtendWith(MockitoExtension.class) ,由於在 Junit5 中須要經過該方式來讓 @Mock@InjectMocks 生效。
  4. 經過 @Mock 建立一個 UserDao 模擬實現類
  5. 經過 @InjectMocks 建立一個 UserService 模擬實現類,並將 @Mock 標記的 UserDao 依賴注入其內部。
  6. 遵循 Given-When-Then 的結構方式編寫測試方法。ide

    1. Given 給出上下文(準備數據)
    2. When 執行測試代碼
    3. Then 斷言測試結果
  7. 定製 Mock 對象(UserDao 對象)insert 方法的返回值,使其返回 true測試

    1. when(dao.insert()).thenReturn(false);
  8. 斷言測試結果ui

    1. assertTrue(result);

完整示例代碼:code

@ExtendWith(MockitoExtension.class)
class UserServiceTest {
    // @Mock 爲 UserDao 模擬一個實現。
    @Mock
    UserDao dao;
    // @InjectMocks 爲 UserServiceImpl 類模擬一個實現,另外還將 @Mock 標記的依賴模擬注入到其中。
    @InjectMocks
    UserServiceImpl service;
    @Test
    @DisplayName("測試新增用戶用例")
    void testSaveUser_Guide() {
        // Given
        when(dao.insert()).thenReturn(true);
        // When
        boolean result = service.save();
        // Then
        assertTrue(result);
    }
}

5. 信息參考

相關文章
相關標籤/搜索