本文主要总结自己近期在项目中对MVC集成测试的实践及理解,因为先前对这块未实践过。主要参考了官方文档《11.3.6
Spring MVC Test Framework》这一章节内容,涉及到Spring
TestContext Framework、TestNG和Mockito这3个测试框架,完全基于Spring自动装配注解(@Autowired)实现,不需要定义额外的setter或构造器来注入bean,也不需要通过Mockito的@Mock和MockitoAnnotations.initMocks(this)代码方式实现实例化,而是通过静态工厂方法Mockito.mock(...)在XML中实现bean实例初始化。
废话不多说了,看一下需要几步就能搞定MVC Controller与Service层的集成测试。(如果你现在也正好使用Spring
Test框架,可以看看下面对TestNG基类封装的代码,我觉得自己写得还可以。小小赞美一下啦~)
1. 定义底层Service接口及实现
Java代码
public interface UserService {
User getUserInfo(long id);
int updateUserInfo(User user);
}
Java代码
public interface UserQueryService {
String getUserName(long userId);
int updateUserName(long userId, String userName);
}
Java代码
@Service
public class UserQueryServiceImpl implements UserQueryService {
@Autowired
private UserService userService;
@Override
public String getUserName(long userId) {
User user = this.userService.getUserInfo(userId);
return user != null ? user.getName() : "";
}
@Override
public int updateUserName(long userId, String userName) {
User user = new User(userId, userName);
int udpateResult = this.userService.updateUserInfo(user);
return udpateResult;
}
}
2. 为 Controller 层的每一接口定义一对
Request与Response(可重用的,就别多定义啦!~\(≧▽≦)/~)
Java代码
@JsonIgnoreProperties(ignoreUnknown = true) // 忽略多传的参数
public class BaseRequest {
}
Java代码
public class UserIDRequest extends BaseRequest {
@JsonProperty("id")
@NotNull(message = "id param is null")
@Min(value = 1, message = "id param must be great or equal than \\{ {value}\\}") // 4.3. Message interpolation -《JSR 303: Bean Validation》
p