您的位置:首页 > 编程语言 > Java开发

单元测试代码:SpringTest+JUnit

2015-05-03 00:00 363 查看
/**
* JUnit单元测试父类,配置了Spring的基础环境。 <br/>
* 可以作为Controller、Service、Dao单元测试的父类。
*
* @author leiwen@fansunion.cn
*/
public class JUnitTestBase {

public static XmlWebApplicationContext context = null;

private static HandlerMapping handlerMapping;
private static HandlerAdapter handlerAdapter;

// /public static String[] CONFIG_FILES = { "classpath:spring-*.xml" };

// public static String[] configs = { "file:src/main/resources/spring-*.xml"
// };
public static String[] CONFIG_FILES = { "file:src/main/resources/spring-*.xml" };

/**
* 读取spring配置文件,初始化上下文。
*/
@BeforeClass
public static void setUp() {
System.out.println("Test start...");

context = new XmlWebApplicationContext();
context.setConfigLocations(CONFIG_FILES);

MockServletContext msc = new MockServletContext();
context.setServletContext(msc);
context.refresh();
msc.setAttribute(
WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,
context);

handlerMapping = (HandlerMapping) context
.getBean(DefaultAnnotationHandlerMapping.class);
handlerAdapter = (HandlerAdapter) context.getBean(context
.getBeanNamesForType(AnnotationMethodHandlerAdapter.class)[0]);

}

// 执行request对象请求的action
public ModelAndView excuteAction(HttpServletRequest request,
HttpServletResponse response) throws Exception {
// 这里需要声明request的实际类型,否则会报错
request.setAttribute(HandlerMapping.INTROSPECT_TYPE_LEVEL_MAPPING, true);

HandlerExecutionChain chain = handlerMapping.getHandler(request);
Object handler = chain.getHandler();
final ModelAndView model = handlerAdapter.handle(request, response,
handler);
return model;
}

@AfterClass
public static void tearUp() {
System.out.println("Test end!");
}

}

//测试Controller的2种方法

/**
* CampaignGroupController单元测试。
*
* @author leiwen@fansunion.cn
*/
public class FansUnionControllerTestextends JUnitTestBase {

@Test
public void prevAddCampaignGroup() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest();
MockHttpServletResponse response = new MockHttpServletResponse();
String requestURI = "/campaignGroup/prevAdd";
request.setRequestURI(requestURI);
request.setMethod("POST");
final ModelAndView mav = this.excuteAction(request, response);
Assert.assertEquals("createCampaignGroup", mav.getViewName());

}

@Test
public void prevAddCampaignGroup2() throws Exception {
CampaignGroupController userController = context.getBean(CampaignGroupController.class);
MockMvc mockMvc = MockMvcBuilders.standaloneSetup(userController)
.build();
ResultActions perform = mockMvc.perform(MockMvcRequestBuilders.post("/campaignGroup/prevAdd"));
ResultActions andExpect = perform
.andExpect(MockMvcResultMatchers.status().is(200));
andExpect
.andExpect(
MockMvcResultMatchers.view()
.name("createCampaignGroup"));
}

}

----需要配置2个bean,测试Controller需要用到

<bean
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
</bean>
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
</bean>

测试Service(Dao类似)

/**
* 这种方式 的单元测试,不需要重复指定 资源文件,减少重复。 麻烦的地方在于,需要手动获取bean。
*
* @author leiwen@fansunion.cn
*/
public class FansUnionServiceTest extends JUnitTestBase {

private static CampaignGroupService campaignGroupService = context
.getBean(CampaignGroupService.class);

// 测试add,remove,update方法的时候,已经测试了find?
@Test
public void addCampaignGroup() {
CampaignGroup cg = buildOneGroup();

campaignGroupService.add(cg);

CampaignGroup dbCampaignGroup = campaignGroupService.find(cg.getId());
Assert.assertEquals(cg, dbCampaignGroup);
campaignGroupService.delete(cg.getId());
}

基于注解的测试

/**
*
* 基于注解的单元测试。
*
* @author leiwen@fansunion.cn
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:spring-mvc-context.xml",
"classpath:spring-common-context.xml" })
public class FansUnionServiceTestWithAnnotation {

@Autowired
private CampaignGroupService campaignGroupService;

/**
* 根据campaignId获取campaignGroup的name集合<br>
* 测试场景:<br>
*
*/
@Test
public void testListCampaignGroupNameByCampaignId(){
System.out.println("**********");
System.out.println(campaignGroupService.listCampaignGroupNameByCampaignId(1005899));
}

}

[/code]
参考资料:http://lohasle.iteye.com/blog/1617929

http://jiuyuehe.iteye.com/blog/1882424
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息