1, 如果我们只是想要mock某一组件可以这样:
- 依赖pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.zws</groupId>
<artifactId>springmvc-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test-autoconfigure</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.49</version>
</dependency>
</dependencies>
</project>
- Application启动类
package com.zws.mvntest;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
- UserService
package com.zws.mvntest.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.zws.mvntest.bean.User;
import com.zws.mvntest.dao.UserDao;
@Service
public class UserService {
@Autowired
private UserDao userDao;
public User getUserById(Long id) {
return userDao.getUserById(id);
}
}
- UserDao
package com.zws.mvntest.dao;
import com.zws.mvntest.bean.User;
public interface UserDao {
User getUserById(Long id);
}
- 测试类UserServiceTest
package com.zws.mvntest;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.BDDMockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.junit4.SpringRunner;
import com.zws.mvntest.bean.User;
import com.zws.mvntest.dao.UserDao;
import com.zws.mvntest.service.UserService;
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserServiceTest {
@MockBean
private UserDao userDao;
@Autowired
private UserService userService;
@Test
public void getUserById() throws Exception {
Long id = 1L;
User user = new User();
user.setName("张三0000");
user.setGender("男");
BDDMockito.given(this.userDao.getUserById(id)).willReturn(user);
User u = this.userService.getUserById(1L);
System.out.println(u);
Assert.assertNotNull(u);
Assert.assertEquals(u.getName(), user.getName());
Assert.assertEquals(u.getGender(), user.getGender());
}
}
这里UserDao没有实现所以mock,用到了@MockBean注解。
mock mvc
- UserController
package com.zws.mvntest.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSON;
import com.zws.mvntest.bean.User;
import com.zws.mvntest.service.UserService;
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/user")
public String getUser() {
User user = userService.getUserById(1L);
return JSON.toJSONString(user);
}
}
- 测试类UserControllerTest
package com.zws.mvntest;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.BDDMockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.RequestBuilder;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.test.web.servlet.ResultMatcher;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import com.zws.mvntest.bean.User;
import com.zws.mvntest.dao.UserDao;
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class UserControllerTest {
@Autowired
private MockMvc mvc;
@MockBean
private UserDao userDao;
@Test
public void exampleTest() throws Exception {
Long id = 1L;
BDDMockito.given(this.userDao.getUserById(id)).willReturn(new User("张三", "男1"));
RequestBuilder builder = MockMvcRequestBuilders.get("/user").accept(MediaType.TEXT_HTML);
ResultActions result = this.mvc.perform(builder);
result.andExpect(MockMvcResultMatchers.status().isOk());
String context = "{\"gender\":\"男1\",\"name\":\"张三\"}";
ResultMatcher matcher = MockMvcResultMatchers.content().string(context);
result.andExpect(matcher);
}
}
参考Spring Boot官方文档,记录下这个mock方式。