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(){

}

……

}

posted @ 2013-04-26 19:58  agefisher  阅读(300)  评论(0编辑  收藏  举报