使用RestTemplate进行测试
结论:
- 1.当需要访问url的时候,注意要将服务启动(就算测试代码写在同一个服务中也要启动服务)
- 2.当使用到springmvc的时候,也要把springmvc的配置文件加入到启动中.
测试情况1,
因为makecertcontroller是new出来的,不是由spring生成的,所以会出现sqlsession为null的情况
解决措施:
new出来的makecertcontroller要测试的方法就加入一个sqlsession的参数,然后在测试类中注入sqlsession,然后把这个传递给要测试的方法,这样就不会为null了出现告警可以不考虑处理,要处理的话就改为scope=”prototype”
2,想直接通过注入makecertcontroller对应的bean的方式来测试,但是报如下告警,最后分析原因是因为我们没有加载springmvc的配置文件的问题,只加载了spring
3,有些方法能直接通过 @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations =
“classpath:config/applicationContext.xml”)
的方式进行测试,是因为刚好他们是由spring进行管理的,不需要加载springmvc,4,如果访问的url,则需要启动服务之后(启动tomcat),才可以进行测试:(注意看console和junit两个地方的报错)
org.springframework.web.client.ResourceAccessException: I/O error on
POST request for
“http://127.0.0.1:8080/portal/bindCertWeb/sendCode“:Connection to
http://127.0.0.1:8080 refused; nested exception is
org.apache.http.conn.HttpHostConnectException: Connection to
http://127.0.0.1:8080 refused@Test public void sendCodeTest() { String url =
“http://127.0.0.1:8080/portal/bindCertWeb/sendCode“;
LinkedMultiValueMap
<!-- httpClient end -->
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
<constructor-arg ref="httpClientFactory" />
<!-- for chinese garbled -->
<property name="messageConverters">
<list>
<bean
class="org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter">
<property name="supportedMediaTypes" ref="mdeiaTypes" />
<property name="partConverters">
<list>
<!-- 负责读取字符串格式的数据和写出二进制格式的数据,其中给StringHttpMessageConverter的supportedMediaTypes属性配置了mdeiaTypes,这样可以处理我们提交测试数据时
候中文乱码的问题。
-->
<bean
class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes" ref="mdeiaTypes" />
</bean>
<!-- 负责读取二进制格式的数据和写出二进制格式的数据 -->
<bean
class="org.springframework.http.converter.ByteArrayHttpMessageConverter" />
<!-- 负责读取资源文件和写出资源文件数据-->
<bean
class="org.springframework.http.converter.ResourceHttpMessageConverter" />
<!-- 负责读取二进制格式的数据和写出二进制格式的数据 -->
<bean
class="org.springframework.http.converter.xml.SourceHttpMessageConverter" />
<bean
class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter" />
<!-- 负责读取二进制格式的数据和写出二进制格式的数据 -->
<bean
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
</list>
</property>
</bean>
<bean
class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes" ref="mdeiaTypes" />
</bean>
</list>
</property>
</bean>
<util:list id="mdeiaTypes" list-class="java.util.ArrayList">
<value>application/x-www-form-urlencoded;charset=UTF-8</value>
<value>multipart/form-data;charset=UTF-8</value>
<value>text/plain</value>
<value>text/html;charset=UTF-8</value>
<value>application/xml;charset=UTF-8</value>
</util:list>
<bean
class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes" ref="mdeiaTypes" />
</bean>
在添加完以上配置之后,可以在我们的测试类里面直接用来测试我们写好的Controller:
1、在测试类上加上该注解:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:config/applicationContext.xml")
2、然后注入resttemplate:
@Autowired
private RestTemplate restTemplate;
3、restTemplate.postForObject(url, map, String.class);
可参考资料:http://blog.csdn.net/wwwihpccn/article/details/30496089