前言
测试框架有很多,Junit,EasyMock,PowerMock,TestNG,DBUnit等。
建议重要的业务流程写单测,使用Junit,EasyMock测试框架
假如业务类为A,单测类的命名方式为ATest,ATest类和A类的包结构保持一致,测试的方法名保持一致
IDEA快速生成Test类
所在类按快捷键
Win:Ctrl + Shift + T
Mac:⇧ + command + T
选中要单测的方法点击OK即可
Junit
不要简单的打印结果,最后写上期望的断言,如
assertTrue(flag);
assertEquals(username, "test");
EasyMock
在微服务应用中,有时候需要调用别人的服务,在别人接口没开发好的情况下,如何进行单测呢?这时候就得Mock别人服务的返回值
假如有一个ManageService,依赖另一个服务的UserService
@Service
public class ManageService {
@Autowired
private UserService userService;
public String getUsername() {
return userService.getUsername();
}
public boolean saveUserInfo(UserInfo userInfo) {
return userService.saveUserInfo(userInfo);
}
}
public interface UserService {
String getUsername();
boolean saveUserInfo(UserInfo userInfo);
}
@Data
public class UserInfo {
private String name;
private Integer age;
}
可以按照如下方式写单测
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppConfig.class)
public class ManageServiceTest {
@Autowired
private ManageService manageService;
private UserService userService;
@Test
public void getUsername() throws Exception {
userService = EasyMock.createMock(UserService.class);
EasyMock.expect(userService.getUsername()).andReturn("test");
Field userServiceField = manageService.getClass().getDeclaredField("userService");
userServiceField.setAccessible(true);
userServiceField.set(manageService, userService);
EasyMock.replay(userService);
String username = manageService.getUsername();
System.out.println(username);
assertEquals(username, "test");
}
@Test
public void saveUserInfo() throws Exception {
userService = EasyMock.createMock(UserService.class);
EasyMock.expect(userService.saveUserInfo(EasyMock.anyObject())).andReturn(true);
Field userServiceField = manageService.getClass().getDeclaredField("userService");
userServiceField.setAccessible(true);
userServiceField.set(manageService, userService);
EasyMock.replay(userService);
boolean flag = manageService.saveUserInfo(EasyMock.anyObject());
System.out.println(flag);
assertTrue(flag);
}
}
可以构造不同类型的入参,如下所示,还有很多方法不再介绍
EasyMock.anyBoolean();
EasyMock.anyString();
EasyMock.anyObject();
参考博客
[1]http://thoreauz.com/2017/07/20/devops/test/JAVA常用测试框架/
[2]https://blog.csdn.net/a672489861/article/details/10065133
测试web
[3]https://juejin.im/post/5b694ff7e51d4519475f7fbc
测试json
[4]https://www.baeldung.com/jsonassert
Junit断言
[5]http://wiki.jikexueyuan.com/project/junit/using-assertion.html
[6]https://www.cnblogs.com/shugen/p/6863027.html
maven生成测试报告+哪些类会被测试
[7]https://blog.csdn.net/fireofjava/article/details/28630449
好文
[8]https://www.cnblogs.com/mistor/p/5225380.html