spring boot + mock
1.pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
2.demo
import com.t1.Application;
import com.t1.config.MockT;
import com.t1.dao.UserDao;
import com.t1.entity.User;
import com.t1.service.T1Service;
import com.t1.service.UserService;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
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.SpringJUnit4ClassRunner;
import org.springframework.test.util.ReflectionTestUtils;
import java.util.ArrayList;
import java.util.List;
@SpringBootTest(classes = Application.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class MockTestDemo {
/**
* 注解@MockBean 用mock的bean替换掉spring管理的bean
*/
@MockBean
private UserDao userDao;
@Autowired
private UserService userService;
@MockBean
private T1Service t1Service;
@MockBean
private MockT mockT;
@Test
public void t1(){
List list = new ArrayList<User>();
User user = new User();
user.setName("爱丽丝");
user.setId("1");
list.add(user);
// 当调用userDao方法时返回 --》list
Mockito.when(userDao.findAll()).thenReturn(list);
List userList = userService.findAll();
Assert.assertEquals(list, userList);
}
@Test
public void t2(){
User user = new User();
user.setName("爱丽丝");
user.setId("1");
// mock 无返回值方法
Mockito.doNothing().when(userDao).saveUser(Mockito.any(User.class));
userService.saveUser(user);
Assert.assertTrue(true);
}
@Test
public void t3() throws InterruptedException {
//此方法可以测试@Async("*")标注的异步方法
//意思是运行原方法,但是是被mock的所以会忽略@Async("*")注解
Mockito.doCallRealMethod().when(t1Service).t1();
for(int i = 0; i <= 10; i++){
t1Service.t1();
}
}
@Test
public void t4(){
Mockito.doCallRealMethod().when(mockT).mockT1(Mockito.anyString());
// 因为是mock的bean 所以bean里的spring的注解会失效,比如@Value或者@Resource等, 所以需要手动设值
ReflectionTestUtils.setField(mockT, "tv", "456");
Assert.assertEquals("123456",mockT.mockT1("123"));
}
}