在這篇文章中咱們將經過【新增用戶】用例,講解 Mockito 框架的基本使用,以及與 Junit5 測試框架的集成。html
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>
在 JUnit5
中須要添加 mockito-junit-jupiter:3.6.28
依賴,用於支持 MockitoExtension
。segmentfault
<dependency> <groupId>org.mockito</groupId> <artifactId>mockito-junit-jupiter</artifactId> <version>3.6.28</version> <scope>test</scope> </dependency>
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; } }
TODO...框架
UserServiceTest
testSaveUser_Default_Success
UserServiceTest
類添加 @ExtendWith(MockitoExtension.class)
,由於在 Junit5
中須要經過該方式來讓 @Mock
、@InjectMocks
生效。@Mock
建立一個 UserDao 模擬實現類@InjectMocks
建立一個 UserService 模擬實現類,並將 @Mock
標記的 UserDao 依賴注入其內部。遵循 Given-When-Then 的結構方式編寫測試方法。ide
定製 Mock 對象(UserDao 對象)insert
方法的返回值,使其返回 true
。測試
when(dao.insert()).thenReturn(false);
斷言測試結果ui
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); } }