JUnit4 & TestNG 與 Spring 整合

最近由于項目需要,開始學習單元測試。但是卡在了測試框架與 Spring 整合的地方,沒法啟動 Spring 容器,導致測試類中使用的 bean 無法自動注入。查了很多資料,最后把 JUnit4TestNG 與 Spring 整合的問題都解決了。

前置準備

引入 jar 包

我們需要掃描類,需要 spring-context 。 Spring 需要與測試框架整合,所以需要 spring-test 。 使用 JUnit4 測試時,需要引入 junit

完整的 pom.xml 文件內容如下:

<?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>com.zcl</groupId>
  <artifactId>test</artifactId>
  <version>1.0-SNAPSHOT</version>
  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.0.6.RELEASE</version>
    </dependency>

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

    <dependency>
      <groupId>org.testng</groupId>
      <artifactId>testng</artifactId>
      <version>6.14.3</version>
      <scope>test</scope>
    </dependency>

  </dependencies>

</project>
復制代碼

創建待測試方法

新建一個類 Greeting

package com.zcl;

import org.springframework.stereotype.Component;

/**
 * @author: changle
 * @time: 2019-06-18 05:16
 */
@Component
public class Greeting {

    public void sayHello() {
        System.out.println("你好呀");
    }

}
復制代碼

類中只包含一個簡單的方法,我們用這個方法進行測試。

創建 Spring 配置文件

resources 文件夾下創建 applicationContext.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"
  xmlns:context="http://www.springframework.org/schema/context"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

  <context:component-scan base-package="com.zcl"/>

</beans>
復制代碼

只添加包掃描就行了。

JUnit4

IDEA ,我們在類名上按下 command + shift + t ,可以快捷的在 test 文件夾下創建包名相同的測試類。

JUnit4 &amp; TestNG 與 Spring 整合

這里還可以選擇生成一些可能會用到的輔助方法。在
Testing library

中可以選擇用到的測試框架,非常的方便。

我們在生成的類的基礎上編寫一個簡單的測試方法并添加能夠整合 Spring 的一些配置。

package com.zcl;

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;

/**
 * @author: changle
 * @time: 2019-06-18 05:19
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class GreetingTest {

    @Autowired
    private Greeting greeting;

    @Test
    public void testSayHello() {
        System.out.println("JUnit4 測試開始");
        greeting.sayHello();
        System.out.println("JUnit4 測試結束");
    }
}
復制代碼

首先是 @RunWith 注解, JUnit 用例都是在 Runner(運行器) 中執行的。通過這個注解,我們可以為測試類指定我們需要的 Runner ,因為是和 Spring 整合,所以選擇 SpringJUnit4ClassRunner

接下來是 @ContextConfiguration 。 這個注解會加載我們填入的文件,得到 Application Context

運行測試用例,最后得到的結果如圖所示:

JUnit4 &amp; TestNG 與 Spring 整合

TestNG

依然是創建測試用例,與 JUnit 的區別只是獲取 Application Context 的方式不同。

package com.zcl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.testng.annotations.Test;

/**
 * @author: changle
 * @time: 2019-06-18 05:45
 */
@ContextConfiguration("classpath:applicationContext.xml")
public class GreetingTest extends AbstractTestNGSpringContextTests {

    @Autowired
    private Greeting greeting;

    @Test
    public void testSayHello() {
        System.out.println("TestNG 測試開始");
        greeting.sayHello();
        System.out.println("TestNG 測試結束");
    }
}
復制代碼

同樣有采用 @ContextConfiguration 來引入 Spring 配置文件。 TestNG 不再需要加入 Runner ,而是讓測試類繼承了 AbstractTestNGSpringContextTests 。這樣才可以訪問到 Application Context

運行測試用例,得到的結果如下圖

JUnit4 &amp; TestNG 與 Spring 整合

總結

學會了測試框架與 Spring 集成之后,我們就可以方便地寫單元測試了。 這兩個測試框架都還支持很多種類的測試,之后會繼續分享它們的其他功能的使用案例。

原文 

https://juejin.im/post/5d080d8df265da1b94214a8b

本站部分文章源于互聯網,本著傳播知識、有益學習和研究的目的進行的轉載,為網友免費提供。如有著作權人或出版方提出異議,本站將立即刪除。如果您對文章轉載有任何疑問請告之我們,以便我們及時糾正。

PS:推薦一個微信公眾號: askHarries 或者qq群:474807195,里面會分享一些資深架構師錄制的視頻錄像:有Spring,MyBatis,Netty源碼分析,高并發、高性能、分布式、微服務架構的原理,JVM性能優化這些成為架構師必備的知識體系。還能領取免費的學習資源,目前受益良多

轉載請注明原文出處:Harries Blog? » JUnit4 & TestNG 與 Spring 整合

贊 (0)
分享到:更多 ()

評論 0

  • 昵稱 (必填)
  • 郵箱 (必填)
  • 網址
2013平特肖公式