单元测试代码:SpringTest+JUnit

/**
 * JUnit单元测试父类,配置了Spring的基础环境。 <br/>
 * 可以作为Controller、Service、Dao单元测试的父类。
 * 
 * @author [email protected]
 */
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 [email protected]
 */
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 [email protected]
 */
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 [email protected]
 */
@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));
 }

}

 

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

http://jiuyuehe.iteye.com/blog/1882424

 

 

 

你可能感兴趣的:(注解,spring,测试,JUnit,单元测试)