Java基礎(十六)斷言(Assertions)


  1.斷言的概念

  假設確信某個屬性符合要求,並且代碼的執行依賴於這個屬性。

  斷言機制允許在測試期間向代碼插入一些檢查語句,當代碼發布時,這些插入的檢查語句將會被自動地移走。

  斷言失敗是致命的,不可恢復的錯誤。斷言檢查只用於開發和測試階段。

  斷言只應該用於在測試階段確定程序內部的錯誤位置。

  

  2.一般使用JUnit 4來進行測試的時候使用斷言

package autoConfig1;
import static org.junit.Assert.*;
import org.junit.Rule;
import org.junit.Test;
import org.junit.contrib.java.lang.system.SystemOutRule;
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;

// 聲明測試套件運行器,為了讓測試在Spring容器環境下執行,以便在測試開始的時候自動創建Spring的上下文。
@RunWith(SpringJUnit4ClassRunner.class)   
// 1.告訴Spring要在CDPlayerConfig中加載配置,因為CDPlayerConfig類中包含了@ComponentScan,啟動了Spring的組件掃描。
// 2.由於Spring啟動了組件掃描,因此可以掃描出所有帶有@Component注解的類,即SgtPeppers類和@Component類,並且在Spring中為其創建一個bean。
@ContextConfiguration(classes = CDPlayerConfig.class)
public class CDPlayerTest {
    
    @Rule // 這個注解是為了在執行case的時候加入測試者特有的操作,而不影響原有的case代碼:減小了特有操作和case原邏輯的耦合。
    public final SystemOutRule systemOutRule = new SystemOutRule().enableLog();
    
    // 將MediaPlayer bean注入到測試代碼之中。
    @Autowired
    private MediaPlayer player;

    // 將CompactDisc bean注入到測試代碼之中。
    @Autowired
    private CompactDisc cd;

    // 簡單的測試斷言cd屬性不為null。
    // 如果它不為null,就意味着Spring能夠發現CompactDisc類,自動在Spring上下文中將其創建為bean並將其注入到測試代碼之中。
    @Test
    public void cdShouldNotBeNull() {
        assertNotNull(cd);
    }
    
    // 簡單的測試斷言player屬性不為null。
    // 如果它不為null,就意味着Spring能夠發現CompactDisc類,自動在Spring上下文中將其創建為bean並將其注入到測試代碼之中。
    @Test
    public void playerShouldNotBeNull() {
        assertNotNull(player);
    }

    // systemOutRule規則可以基於控制台的輸出編寫斷言,這里斷言play()方法的輸出被發送到了控制台。
    @Test
    public void play() {
        player.play();
        assertEquals("Playing Sgt. Pepper's Lonely Hearts Club Band by The Beatles\r\n", systemOutRule.getLog());
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM