使用3.2做单元测试的时候发现这个问题,因为之前都是用3.0中的配置适配器使用AnnotationMethodHandlerAdapter,到3.2中升级为RequestMappingHandlerAdapter;

运行之前的单元测试发现报异常:java.lang.NoSuchMethodException,看了一下堆栈发现反射调用的方法签名明显不对,于是看了一下调用的代码,

之前是:handlerAdapter.handle(request, response,  new HandlerMethod(controller, "setClassBreaksInfo"))

感觉是这里的问,继续看handle的参数,发现还有一个Class<?>... parameterTypes,预计根据这里还匹配调用参数签名的,于是改为跟调用方法签名对应的ClassType,然后可以正确运行了,整体配置如下:

 

 1 package com.catt.base;
 2 
 3 import org.junit.runner.RunWith;
 4 import org.springframework.beans.factory.annotation.Autowired;
 5 import org.springframework.mock.web.MockHttpServletRequest;
 6 import org.springframework.mock.web.MockHttpServletResponse;
 7 import org.springframework.test.context.ContextConfiguration;
 8 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 9 import org.springframework.test.context.transaction.TransactionConfiguration;
10 import org.springframework.transaction.annotation.Transactional;
11 import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
12 
13 
14 @RunWith(SpringJUnit4ClassRunner.class)  
15 @ContextConfiguration(locations = { "classpath:applicationContext.xml" ,"classpath:spring-servlet.xml"})
16 @Transactional
17 @TransactionConfiguration(defaultRollback = true)  
18 /**
19  * Spring集成Jnuit Action单元测试
20  * @author dgx
21  *    @data 2014-05-19
22  */
23 public abstract class AbstractActionTestCase {
24      @Autowired
25      protected RequestMappingHandlerAdapter  handlerAdapter;  
26       
27      protected  final MockHttpServletRequest request = new MockHttpServletRequest();  
28      protected  final MockHttpServletResponse response = new MockHttpServletResponse();
29      
30      
31      public AbstractActionTestCase()
32      {
33          response.setContentType("text/plain;charset=UTF-8");
34      }
35 }
测试抽象累

相关文章: