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()); } }