Spring入門學習手冊 4:Spring單元測試怎麼搞?

上一篇在這php

完整代碼在這spring

1、什麼是單元測試

單元測試(unit testing),是指對軟件中的最小可測試單元進行檢查和驗證。對於單元測試中單元的含義,通常來講,要根據實際狀況去斷定其具體含義,如C語言中單元指一個函數,Java裏單元指一個類,圖形化的軟件中能夠指一個窗口或一個菜單等。總的來講,單元就是人爲規定的最小的被測功能模塊。單元測試是在軟件開發過程當中要進行的最低級別的測試活動,軟件的獨立單元將在與程序的其餘部分相隔離的狀況下進行測試。(來自百度百科)apache

回想一下前面的例子,每次進行測試的時候都用了一個主函數,在主函數的裏調用要測試的類,而單元測試的話就不須要寫主函數了。bash

2、Spring單元測試怎麼搞?

(下面的例子基於上一個例子app

  1. 準備工做
  • 要準備的包

spring-testeclipse

junitmaven

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>SpringLearn</groupId>
    <artifactId>SpringDemo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>4.3.11.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>aopalliance</groupId>
            <artifactId>aopalliance</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.3.11.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.3.11.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.11.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjrt -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.9.1</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.6.8</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>

        <!--單元測試的包-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.3.11.RELEASE</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.8</version>
                <configuration>
                    <downloadSources>true</downloadSources>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

複製代碼
  1. 修改Test類爲:
package com.learn.test;

import com.learn.service.ProductService;
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;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class Test {
    @Autowired
    ProductService ps;

    @org.junit.Test public void test() {
        ps.doSomeService();
    }

}
複製代碼

這裏要解釋一下test()方法前面註解是,是由於Test註解 和 Test類重名了,因此必定要加上包名。函數

修改完成後main函數被去掉了而加上了和單元測試有關的註解。post

@RunWith(SpringJUnit4ClassRunner.class) 放在類名前,用來指明這是一個Spring的測試類。單元測試

@ContextConfiguration("classpath:applicationContext.xml") 放在類名前,找到Spring的配置文件。

@Test 放在要測試的方法前,測試邏輯。

運行的時候要用JUnit的方式運行,以下圖所示:

運行結果:

start log:doSomeService
僞裝這裏是一些核心業務代碼!
end log:doSomeService
複製代碼
  1. 換個類試試

先修改一下ProductSer類爲:

package com.learn.service;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.stereotype.Component;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
@Component("ps")
public class ProductService {

    @Test
    public void doSomeService() {
        System.out.println("僞裝這裏是一些核心業務代碼!");
    }

}
複製代碼

運行結果:

僞裝這裏是一些核心業務代碼!
複製代碼

能夠看到單元測試徹底是獨立的,前面配置好的AOP,一點做用都沒起。

相關文章
相關標籤/搜索