spring 下测试代码编写
2. 测试controller
测试controller和service的测试类似,不同的是可能controller的action中会同时调用service的多个方法,多个方法之间可能有依赖关系,所以不建议使用事务管理器回滚事务,而是通过编写数据清理的代码来清理测试过程中产生的数据。测试controller时,还需要借用spring的mockMvc来模拟收到的浏览器请求。
一般会把测试中公共的东西抽出,形成一个基类:
@ContextConfiguration(locations = {"file:src/main/webapp/WEB-INF/conf/spring/web-entrance.xml","file:src/test/resources/test_base.xml"})
@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
public class AbstractContextControllerTest {
@Resource
protected WebApplicationContext webApplicationContext;
@Resource
protected CookyjarFilter cookyjarFilter;
@Resource
protected CharacterEncodingFilter characterEncodingFilter;
@Resource
protected DwUserAgent dwUserAgent;
protected MockMvc mockMvc;
/**
* 初始化mockMvc环境,注入用户信息
*/
protected void initMockEvent(){
CookieInjectFilter cookieInjectFilter = new CookieInjectFilter();
cookieInjectFilter.setDwUserAgent(dwUserAgent);
mockMvc = webAppContextSetup(webApplicationContext)
.addFilters(cookyjarFilter, characterEncodingFilter, cookieInjectFilter)
.build();
}
/**
* 获取一个类似于uuid的字符串
* @return
*/
protected String getFakeUUIDString(){
return Md5Utils.md52(UUID.randomUUID().toString()).substring(4);
}
@Test
public void testBlank(){}
}
具体的测试类代码如下(节选):
@ContextConfiguration("file:src/test/resources/auto/hospitalControllerparams.xml")
public class TestHospitalController extends AbstractContextControllerTest {
private static String hospitalName=null;
@Before
public void setup() throws Exception {
initMockEvent();
}
@After
public void clearTestData() throws EXception{
}
@Test
public void testXXXXXX(){
}
……
}