最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot 單元測試JUnit的實踐

 更新時間:2018年11月05日 14:06:02   作者:王磊  
JUnit是一款優(yōu)秀的開源Java單元測試框架,也是目前使用率最高最流行的測試框架,這篇文章主要介紹了Spring Boot 單元測試JUnit的實踐,感興趣的小伙伴們可以參考一下

一、介紹

JUnit是一款優(yōu)秀的開源Java單元測試框架,也是目前使用率最高最流行的測試框架,開發(fā)工具Eclipse和IDEA對JUnit都有很好的支持,JUnit主要用于白盒測試和回歸測試。

<!--more-->

  • 白盒測試:把測試對象看作一個打開的盒子,程序內(nèi)部的邏輯結(jié)構和其他信息對測試人 員是公開的;
  • 回歸測試:軟件或環(huán)境修復或更正后的再測試;
  • 單元測試:最小粒度的測試,以測試某個功能或代碼塊。一般由程序員來做,因為它需要知道內(nèi)部程序設計和編碼的細節(jié);

JUnit GitHub地址:https://github.com/junit-team

二、JUnit使用

開發(fā)環(huán)境:

  • Spring Boot 2.0.4 RELEASE
  • JUnit 4.12
  • Maven
  • IDEA 2018.2

2.1 檢測JUnit依賴

如果是Spring Boot項目默認已經(jīng)加入了JUnit框架支持,可在pom.xml中查看:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-test</artifactId>
  <scope>test</scope>
</dependency>

如果Maven項目中沒有添加JUnit依賴,可參照如上代碼,手動添加。

2.2 基礎使用

簡單的測試代碼如下:

@RunWith(SpringRunner.class)
@SpringBootTest
public class SimpleTest {
  @Test
  public void doTest() {
    int num = new Integer(1);
    Assert.assertEquals(num, 1);
  }
}

在測試類中郵件運行項目,效果如下:

從控制臺可以看出測試通過了。

2.3 注解說明

2.3.1 注解列表

  • @RunWith:標識為JUnit的運行環(huán)境;
  • @SpringBootTest:獲取啟動類、加載配置,確定裝載Spring Boot;
  • @Test:聲明需要測試的方法;
  • @BeforeClass:針對所有測試,只執(zhí)行一次,且必須為static void;
  • @AfterClass:針對所有測試,只執(zhí)行一次,且必須為static void;
  • @Before:每個測試方法前都會執(zhí)行的方法;
  • @After:每個測試方法前都會執(zhí)行的方法;
  • @Ignore:忽略方法;

2.3.2 超時測試

代碼如下,給Test設置timeout屬性即可,時間單位為毫秒:

@Test(timeout = 1000)

2.4 斷言測試

斷言測試也就是期望值測試,是單元測試的核心也就是決定測試結(jié)果的表達式,Assert對象中的斷言方法:

  • Assert.assertEquals 對比兩個值相等
  • Assert.assertNotEquals 對比兩個值不相等
  • Assert.assertSame 對比兩個對象的引用相等
  • Assert.assertArrayEquals 對比兩個數(shù)組相等
  • Assert.assertTrue 驗證返回是否為真
  • Assert.assertFlase 驗證返回是否為假
  • Assert.assertNull 驗證null
  • Assert.assertNotNull 驗證非null

代碼示例如下:

@Test
public void doTest() {
  String[] string1 = {"1", "2"};
  String[] string2 = string1;
  String[] string3 = {"1", "2"};

  Assert.assertEquals(string1, string2);
  Assert.assertEquals(string2, string3);
  Assert.assertSame(string1, string2);
  Assert.assertSame(string2, string3); //驗證不通過,string2、string3指向的引用不同
}

2.5 Web模擬測試

在Spring Boot項目里面可以直接使用JUnit對web項目進行測試,Spring 提供了“TestRestTemplate”對象,使用這個對象可以很方便的進行模擬請求。

Web測試只需要進行兩步操作:

  1. 在@SpringBootTest注解上設置“ebEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT”隨機端口;
  2. 使用TestRestTemplate進行post或get請求;

示例代碼如下:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class UserControllerTest {
  @Autowired
  private TestRestTemplate restTemplate;
  @Test
  public void getName() {
    String name = restTemplate.getForObject("/name", String.class);
    System.out.println(name);
    Assert.assertEquals("Adam", name);
  }
}

其中getForObject的含義代表執(zhí)行get請求,并返回Object結(jié)果,第二個參數(shù)設置返回結(jié)果為String類型,更多的請求方法:

  • getForEntity:Get請求,返回實體對象(可以是集合);
  • postForEntity:Post請求,返回實體對象(可以是集合);
  • postForObject:Post請求,返回對象;

2.6 數(shù)據(jù)庫測試

在測試數(shù)據(jù)操作的時候,我們不想讓測試污染數(shù)據(jù)庫,也是可以實現(xiàn)的,只需要添加給測試類上添加“@Transactional”即可,這樣既可以測試數(shù)據(jù)操作方法,又不會污染數(shù)據(jù)庫了。

示例代碼如下:

@Test
@Transactional
public void saveTest() {
  User user = new User();
  user.setName("Adam");
  user.setAge(19);
  user.setPwd("123456");
  userRepository.save(user);
  System.out.println("userId:" + user.getId());
  Assert.assertTrue(user.getId()>0);
}

執(zhí)行效果如下:

我們可以看到Id有了,也測試通過了,說明數(shù)據(jù)是添加是正常的,但查看數(shù)據(jù)庫發(fā)現(xiàn)數(shù)據(jù)里面是沒有這條數(shù)據(jù)的。

如果把“@Transactional”去掉的話,數(shù)據(jù)庫就會正常插入了。

2.7 Idea快速開啟測試

在Idea里面可以快速的添加測試的方法,只需要在要測試的類里面右鍵選擇“GoTo”點擊“Test”,選擇你需要測試的代碼,點擊生成即可,如果是Windows 用戶可以使用默認快捷鍵“Ctrl + Shift + T”,效果如下圖:

選完方法之后,點擊OK按鈕,就生成了對應的測試代碼,用戶只需要完善框架里面的具體測試邏輯就可以了。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • SpringBoot實現(xiàn)定時任務和異步調(diào)用

    SpringBoot實現(xiàn)定時任務和異步調(diào)用

    這篇文章主要為大家詳細介紹了SpringBoot實現(xiàn)定時任務和異步調(diào)用,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • mybatis數(shù)組和集合的長度判斷及插入方式

    mybatis數(shù)組和集合的長度判斷及插入方式

    這篇文章主要介紹了mybatis數(shù)組和集合的長度判斷及插入方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • springboot工程如何使用阿里云OSS傳輸文件

    springboot工程如何使用阿里云OSS傳輸文件

    阿里云對象存儲OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存儲服務,多種存儲類型供選擇,全面優(yōu)化存儲成本,非常適合存儲非結(jié)構化數(shù)據(jù),本文給大家介紹springboot工程使用阿里云OSS傳輸文件的操作,感興趣的朋友一起看看吧
    2023-08-08
  • SpringBoot+Redis布隆過濾器防惡意流量擊穿緩存

    SpringBoot+Redis布隆過濾器防惡意流量擊穿緩存

    本文主要介紹了SpringBoot+Redis布隆過濾器防惡意流量擊穿緩存,文中根據(jù)實例編碼詳細介紹的十分詳盡,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Java 輕松實現(xiàn)二維數(shù)組與稀疏數(shù)組互轉(zhuǎn)

    Java 輕松實現(xiàn)二維數(shù)組與稀疏數(shù)組互轉(zhuǎn)

    在某些應用場景中需要大量的二維數(shù)組來進行數(shù)據(jù)存儲,但是二維數(shù)組中卻有著大量的無用的位置占據(jù)著內(nèi)存空間,稀疏數(shù)組就是為了優(yōu)化二維數(shù)組,節(jié)省內(nèi)存空間
    2022-04-04
  • 基于springboot處理date參數(shù)過程解析

    基于springboot處理date參數(shù)過程解析

    這篇文章主要介紹了基于springboot處理date參數(shù)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • Java中覆蓋finalize()方法實例代碼

    Java中覆蓋finalize()方法實例代碼

    這篇文章主要介紹了Java中覆蓋finalize()方法實例代碼,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • JAVA實現(xiàn)長連接(含心跳檢測Demo)

    JAVA實現(xiàn)長連接(含心跳檢測Demo)

    這篇文章主要介紹了JAVA實現(xiàn)長連接(含心跳檢測Demo),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • SpringAop切入點execution表達式的深入講解

    SpringAop切入點execution表達式的深入講解

    Spring AOP 可能會經(jīng)常使用 execution切入點指示符,下面這篇文章主要給大家介紹了關于SpringAop切入點execution表達式的相關資料,需要的朋友可以參考下
    2021-08-08
  • java基于遞歸算法實現(xiàn)漢諾塔問題實例

    java基于遞歸算法實現(xiàn)漢諾塔問題實例

    這篇文章主要介紹了java基于遞歸算法實現(xiàn)漢諾塔問題,結(jié)合具體實例形式分析了java遞歸算法的實現(xiàn)與使用技巧,需要的朋友可以參考下
    2017-07-07

最新評論

和顺县| 徐闻县| 漳浦县| 冕宁县| 肇庆市| 鄂尔多斯市| 永川市| 新巴尔虎右旗| 华安县| 五莲县| 凤冈县| 阳信县| 清远市| 镇雄县| 乃东县| 额尔古纳市| 通化市| 鄱阳县| 宜春市| 漯河市| 南康市| 奉新县| 青阳县| 梁山县| 义马市| 和硕县| 巍山| 深水埗区| 阜康市| 新泰市| 石嘴山市| 贺兰县| 广汉市| 台江县| 虞城县| 昌都县| 石林| 璧山县| 泊头市| 边坝县| 出国|