在这篇文章中咱们将经过【新增用户】用例,讲解 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); } }