zoukankan      html  css  js  c++  java
  • spring junit单元测试

    项目是有很多个功能块组成的,我们开发的时候,当我们开发出来一个功能,想要测试这个功能是否正确,不可能等到前端和后端全部写好了再进行测试,这样太浪费时间,有没有什么方法能直接测试后台的功能写的是否正确(比如:service这个模块的功能)?当然有,下面讲解一个Junit单元测试。

    我们是在Maven中进行测试的:

    在maven中新建一个java EE工程:

    (1)打开maven,在左栏边,右键=>new=>Maven Project

    (2)不要勾选create a simple project这一项,点击“next”

    (3)选择后缀名为“webapp”这一栏,点击“next”

     (4)填写“Group Id”和“Artifact Id”,点击“finish”

     

    这样就可以创建一个javaEE工程了,但是一个完整的项目有四个目录,如下图:

    但是它会缺少几个source folder,但是项目已经默认有,我们重新建缺少的那几个目录

    使用Junit单元测试,需要两个依赖jar包  Junit和test

     我们通过配置来导入这两个jar包及其所依赖的jar包,(通过maven中央仓库  https://mvnrepository.com/)

    (1)在pom.xml文件里添加响应的jar依赖

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>oracle.com</groupId>
      <artifactId>JunitTest</artifactId>
      <packaging>war</packaging>
      <version>0.0.1-SNAPSHOT</version>
      <name>JunitTest Maven Webapp</name>
      <url>http://maven.apache.org</url>
      <dependencies>
        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.1.2.RELEASE</version>
            <scope>test</scope>
        </dependency>
      </dependencies>
      <build>
        <finalName>JunitTest</finalName>
      </build>
    </project>

    下面我们通过一个小例子来说明,直接上代码:

    在service层来测试,新建一个接口以及该接口的实现类

    ISayHello.java的代码是:

    package com.service;
    
    public interface ISayHello {
        public void sayHello();
    }

     SayHelloImpl.java的代码是:

    package com.service.imple;
    
    import com.service.ISayHello;
    
    public class SayHelloImpl implements ISayHello{
    
        @Override
        public void sayHello() {
            System.out.println("你好啊!!!程序员");        
        }
    
    }

    spring.xml代码是:

    <?xml version="1.0" encoding="UTF-8" ?>
    <beans   xmlns="http://www.springframework.org/schema/beans" 
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://www.springframework.org/schema/beans 
             http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
         <bean id="hello" class="com.service.imple.SayHelloImpl"></bean>
    </beans>

    spring.xml是实例化的第三方,是spring中IoC容器帮我们实例化对象的。其中class属性是实现类的全路径,id是实例化对象的名称。

    pom.xml代码是:(我们还要导入spring的核心jar包)

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>oracle.com</groupId>
      <artifactId>JunitTest</artifactId>
      <packaging>war</packaging>
      <version>0.0.1-SNAPSHOT</version>
      <name>JunitTest Maven Webapp</name>
      <url>http://maven.apache.org</url>
      <dependencies>
        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.1.2.RELEASE</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.1.1.RELEASE</version>
        </dependency>
      <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.1.RELEASE</version>
        </dependency>
      </dependencies>
      <build>
        <finalName>JunitTest</finalName>
      </build>
    </project>

     在src/test/java该目录项目新建一个JunitTset类进行测试:

    JunitTset.java代码是:

    package com.test;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    import com.service.ISayHello;
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations="classpath:spring.xml")
    public class JunitTest {
        @Autowired
        private ISayHello sayhello;
        
        @Test
        public void test() {
            sayhello.sayHello();
        }
    }

    其中:

    @RunWith(SpringJUnit4ClassRunner.class)

    通过注解的形式,意思是使用JUnit4进行测试

    @ContextConfiguration(locations="classpath:spring.xml")

    通过注解的形式,意思是加载spring.xml配置文件

    @Autowired
        private ISayHello sayhello;

    因为是引入了ISayHello抽象,这个抽象是一个接口,使用@Autowired注解形式来帮我们注入,@Autowired是根据抽象类型,自动去spring容器中,帮我们找到类型是ISayHello的实现类,然后把对象自动注入进来,我们就可以直接使用了该对象了,然后可以调用到该抽象里的方法了。

    @Test
        public void test() {
            sayhello.sayHello();
        }

    其中:@Test是说明是单元测试,必须有的。

    运行结果是:

  • 相关阅读:
    02点睛Spring4.1-Java Config
    01点睛Spring4.1-依赖注入
    00点睛Spring4.1-环境搭建
    Cas(09)——通过Proxy访问其它Cas应用
    Cas(08)——单点登出
    Cas(07)——建立使用Cas进行单点登录的应用
    Cas(06)——基于数据库的认证
    Cas(05)——修改Cas Server的其它配置
    remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel.
    解放双手—Cobbler批量自动化部署多版本系统
  • 原文地址:https://www.cnblogs.com/WQX-work24/p/9928110.html
Copyright © 2011-2022 走看看