欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Junit4在SSM中应用

程序员文章站 2022-07-12 14:01:11
...

项目背景

最近在看Spring相关知识,在看源码之后,注意到项目结构是包含main和test2个文件夹。main文件包含的当然是源文件,而test是针对src源文件构建的测试类。具体如图所示
Junit4在SSM中应用
单元测试:
web项目中怎么针对某一模块进行单元测试,我之前的方法是每次启动tomcat,然后通过页面点点去触发需要测试的代码。但这样会带来一个问题: 当项目小的时候,一切ok,没问题。但是当项目大了之后(比如我现在做的这个项目),每次启动都需要个10几秒。这种单元测试方式每次测试都会花费大量的时间在tomcat启动上,这其实不是我们想要的结果。

Junit4

JUnit是一个Java语言的单元测试框架,他可以帮助我们更加方便简介的进行单元测试。

Junit4 在SSM中的应用

1 pom.xml引入jar包:

<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-test</artifactId>
   <version>4.3.7.RELEASE</version>
</dependency>
<dependency>
   <groupId>junit</groupId>
   <artifactId>junit</artifactId>
   <version>4.12</version>
</dependency>

2 编写测试用例:
偷学spring中格式,在和main同级的目录下新建test文件,并把test文件 mark directory as—> test sources root.

//注解让测试运行于Spring测试环境。
@RunWith(SpringJUnit4ClassRunner.class)
//引入Spring配置
@ContextConfiguration({"classpath*:/dispatcher-servlet.xml", "classpath*:/mybatis-config.xml"})
public class TestWeChat {

    @Test
    public void testWeChat() {
        List<String> strings = new ArrayList<>();
        strings.add("34920");
        strings.add("44568");
        WeChatMsgUtils.sendBroadCast(strings, "测试微信发送消息");
        WeChatMsgUtils.createSendGroupMsg(strings, "企业微信测试", "测试");
    }
}

但是这样还不行,可能会报错:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.resource.ResourceHttpRequestHandler#0': Invocation of init method failed; nested exception is java.lang.IllegalStateException: WebApplicationObjectSupport instance [ResourceHttpRequestHandler [locations=[class path resource [WEB-INF/resources/]], resolvers=[aaa@qq.com4a8bf1dc]]] does not run in a WebApplicationContext but in: aaa@qq.com72d818d1: startup date [Fri May 25 16:50:52 CST 2018]; root of context hierarchy

原因是:静态资源的Handler的ResourceHttpRequestHandler不能创建。那么我们可以通过指定静态资源位置来创建。
也就是加上

@WebAppConfiguration("src/main/resources")

@WebAppConfiguration注解在类上,用来声明加载的ApplicationContext是一个WebApplicationContext。它的属性指定的是Web资源的位置,默认为src/main/webapp。
继续运行 ,我擦,还是报错:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'webSocketHandlerMapping' defined in class path resource [org/springframework/web/socket/config/annotation/DelegatingWebSocketConfiguration.class]: 

这个报错的原因是因为,我们在项目中用到了websocket。
google之后,发现是缺少一个引用:

  <dependency>
     <groupId>org.apache.tomcat.embed</groupId>
     <artifactId>tomcat-embed-websocket</artifactId>
     <version>7.0.52</version>
     <scope>test</scope>
 </dependency>

go on
终于没有报错了:结果如图所示:
Junit4在SSM中应用

总结

在ssm中使用junit4 其实只需要3步骤。

1 在pom.xml文件中引用对应的包:

<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-test</artifactId>
   <version>4.3.7.RELEASE</version>
</dependency>
<dependency>
   <groupId>junit</groupId>
   <artifactId>junit</artifactId>
   <version>4.12</version>
</dependency>
//项目中如果有用到websocket,需要添加下面的包,没用到就算了
 <dependency>
     <groupId>org.apache.tomcat.embed</groupId>
     <artifactId>tomcat-embed-websocket</artifactId>
     <version>7.0.52</version>
     <scope>test</scope>
 </dependency>

2 编写对应的测试类:

//注解让测试运行于Spring测试环境。
@RunWith(SpringJUnit4ClassRunner.class)
//引入Spring配置
@ContextConfiguration({"classpath*:/dispatcher-servlet.xml", "classpath*:/mybatis-config.xml"})
@WebAppConfiguration("src/main/resources")

3 需要测试方法加上@Test:

@Test
public void testWeChat() {
       List<String> strings = new ArrayList<>();
       strings.add("34920");
       strings.add("44568");
       WeChatMsgUtils.sendBroadCast(strings, "测试微信发送消息");
       WeChatMsgUtils.createSendGroupMsg(strings, "企业微信测试", "测试");
 }
相关标签: junit4 spring