- 首页 > it技术 > >
java|使用Spring+Junit+Mockito做代码自测
【java|使用Spring+Junit+Mockito做代码自测】重构代码时一套完善的测试工作能给我们莫大的帮助,下面时我使用Mockito做的Demo,目的是替换掉Dubbo 的相关接口。供不熟悉Mockito 的同学做参考。
junit:junit:4.11
org.springframework:spring-test:3.2.4.RELEASE
org.mockito:mockito-all:1.10.19
jdk1.8
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.MockitoAnnotations;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@ContextConfiguration(locations = {"classpath:spring/application.xml"})
@RunWith(SpringJUnit4ClassRunner.class)
public class BaseTest {
@Before
public void setup() {
/** 如果同时需要注入和mock注入,SpringJUnit4ClassRunner的前提下,注入mock */
MockitoAnnotations.initMocks(this);
}@Test
public void test() {
Assert.assertEquals(1, 1);
}
}
import cn.idongjia.makalu.biz.PostBO;
import cn.idongjia.makalu.domain.post.MakaluUser;
import cn.idongjia.makalu.manager.ClanManager;
import cn.idongjia.makalu.pojo.post.Post;
import cn.idongjia.makalu.repo.PostRepo;
import cn.idongjia.makalu.service.PostService;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.Spy;
import javax.annotation.Resource;
import java.util.Optional;
/*
* service 被标记了 @InjectMocks , 在 setup 方法中 执行 MockitoAnnotations.initMocks(this);
的时候,会将标记了
* @Mock或 @Spy 的属性注入到 service 中。
* 如果是 @Mock, 那就是通常的方式,service里面的provider完全被Mock实例替换,所有的调用都是针对Mock生成类的。
* 如果是 @Autowired 加 @Spy , 那么对于定制了返回值的会调用 Mock实例,否则会调用真实注入的属性。
*/
public class MockTestDemo extends BaseTest{@InjectMocks
@Resource
PostService postService;
@InjectMocks
@Spy
@Resource
private PostBO postBO;
//注入到postService 中@InjectMocks
@Spy
@Resource
private PostRepo postRepo;
//注入到postRepo 中//Dubbo接口
@Mock
private ClanManager clanManager;
//注入到postRepo 中@Test
public void test() {
System.out.println("======***************");
/**
* 构造一个自己的对象。
*/
User mu = new User();
mu.setUsername("zzz");
Optional user = Optional.of(mu);
// 设置模拟对象的返回预期值
Mockito.when(clanManager.takeUser(21L)).thenReturn(user);
Post post = this.postService.get(5L);
System.out.println(String.format("使用mock后的结果:%s", post.getUsername()));
//修改后的结果值
System.out.println("======***************");
}
推荐阅读