博客搬家,原 blog:https://blog.csdn.net/chensanwa/article/details/105881067
1. 扯犊子
话不多说,单元测试,知道的卅?
mock 数据? 也懂的卅?
好,上菜!!!
2. 一个字,干
业务逻辑说明: MockitoService 调用 MockitoDao, 需要对 service 进行测试
待测试代码:
MockitoService.java
@Servicepublic class MockitoService { @Autowired private MockitoDao mockitoDao; public String getData() { String data = mockitoDao.getData(); return "service:" + data; }}
复制代码
MockitoDao.java
@Componentpublic 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
评论