SpingBoot2.x+Mockito+Junit5单元测试
1.引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
2.初始化
-
idea中光标放在service类上,按下alt+insert,弹出Test,点击它,自动生成单元测试类
如图:
-
单元测试类中初始化mock注解对象(两种方式):
-
类上添加@ExtendWith(MockitoExtension.class)
-
在类中标注了@BeforeEach的方法中添加一段代码,如下:
MockitoAnnotations.initMocks(this);
-
3.编写单元测试类
- 前提准备
准备两个类,HelloService、HelloMapper
@Service
public class HelloService {
@Autowired
private HelloMapper helloMapper;
public String hello() {
if (helloMapper != null) {
return helloMapper.sout();
}
return "";
}
}
@Repository
public interface HelloMapper {
default String sout() {
return "666";
}
}
-
单元测试类编写代码(有两种方式)
-
方式一:
@ExtendWith(MockitoExtension.class) public class Junit5Mockito { @InjectMocks private HelloService helloService; // 被mock的对象一定要使用public修改,不能使用private @Mock public HelloMapper helloMapper; @Test void testHelloService() { when(helloMapper.sout()).thenReturn("777"); String hello = helloService.hello(); // 期望值:777,该断言会success Assertions.assertEquals(hello, "777"); // 期望值:777,该断言会error // Assertions.assertEquals(hello, "666"); } }
-
方式二:
class HelloServiceTest { @InjectMocks private HelloService helloService; @Mock public HelloMapper helloMapper; @BeforeEach void setUp() { MockitoAnnotations.initMocks(this); } /** * 可整合Assertions类来进行断言 */ @Test void testHelloService() { when(helloMapper.sout()).thenReturn("777"); String hello = helloService.hello(); // 期望值:777,该断言会success Assertions.assertEquals(hello, "777"); // 期望值:777,该断言会error // Assertions.assertEquals(hello, "666"); }
4.其他
单元测试JUnit5使用:https://www.yuque.com/atguigu/springboot/ksndgx
Junit5整合MockitoExtension扩展:https://javadoc.io/static/org.mockito/mockito-junit-jupiter/3.11.2/org/mockito/junit/jupiter/MockitoExtension.html
Mockito官方文档:https://javadoc.io/static/org.mockito/mockito-core/3.1.0/org/mockito/Mockito.html#45
JUnit5官方文档:https://junit.org/junit5/docs/current/user-guide/
Springboot-testing官方文档:https://docs.spring.io/spring-boot/docs/2.2.6.RELEASE/reference/html/spring-boot-features.html#boot-features-testing
MockitoAnnotations-api:https://javadoc.io/static/org.mockitomockito-core/3.1.0/org/mockito/MockitoAnnotations.html
Mockito官方文档中文翻译:https://blog.csdn.net/bboyfeiyu/article/details/52127551?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.control
@Mock 和 @InjectMocks组合使用:https://www.jianshu.com/p/bb705a56f620
-