Junit5快速入門指南-3
阿新 • • 發佈:2021-08-14
Fixtures 是測試中非常重要的一部分。他們的主要目的是建立一個固定/已知的環境狀態以確保 測試可重複並且按照預期的方式執行。比如在app測試中
基類@BeforeClass 配置初始化,初始化driver,安裝啟動app等,基類@AfterClass 退出前清理環境
public class Junit5Demo_Fixtures {
@BeforeAll
static void beforeAll() {
System.out.println("Father BeforeAll 執行了!");
}
@BeforeEach
void beforEach() {
System.out.println("Father BeforeEach 執行了!");
}
@AfterEach
void afterEach() {
System.out.println("Father AfterEach 執行了!");
}
@AfterAll
static void afterAll() {
System.out.println("Father AfterAll 執行了!");
}
@Test
void testMethod01() {
System.out.println("Father testMethod01 執行了!");
}
@Test
void testMethod02() {
System.out.println("Father testMethod0102 執行了!");
}
}
子類繼承父類測試方法執行順序,相同優先順序,父類先進,子類先出
public class Junit5Demo_Fixtures1 extends Junit5Demo_Fixtures {
@BeforeAll
static void childBeforeAll() {
System.out.println("child BeforeAll 執行了!");
}
@AfterAll
static void childAfterAll() {
System.out.println("child AfterAll 執行了!");
}
@BeforeEach
void childBeforEach() {
System.out.println("child BeforEach 執行了!");
}
@AfterEach
void childAfterEach() {
System.out.println("child AfterEach 執行了!");
}
@Test
void childTestMethod01() {
System.out.println("child TestMethod01 執行了!");
}
@Test
void childTestMethod02() {
System.out.println("child TestMethod02 執行了!");
}
}
assertAll()實現1個用例中多個斷言,實現斷言失敗仍然會繼續下一個斷言
@Test // 錯誤後依然繼續執行
public void addTest() {
int resultPass = Calculator.add(4,2);
int resultFail = Calculator.add(4,2);
int result = Calculator.add(4,2);
System.out.println("add:" + result);
assertAll(("計算結果:"),
()->assertEquals(6,resultPass),
()->assertEquals(7,resultFail),
()->assertEquals(8,result));
}
@nest巢狀測試模擬支付購買流程
public class LoginAndBuy {
//存放資料的變數datamap
private static HashMap<String,Object> datamap=new HashMap<String,Object>();
@Test
void Login(){
datamap.put("login","success");
System.out.println("使用者登入狀態為"+datamap.get("login"));
}
@Nested
@DisplayName("第二個執行")
class pay{
@Test
void paytest(){
if (StringUtils.isNotEmpty((CharSequence) datamap.get("buy"))){
System.out.println("正在支付...");
System.out.println(datamap.get("buy"));
}else {
System.out.println("尚未購買???????????");
}
}
}
@Nested //使用nested 進行業務流測試
@DisplayName("第一次執行")
class Buy{
@Test
void buyTest(){
// 判斷使用者是否登入成功
if (datamap.get("login").equals("success")){
System.out.println("使用者登入成功可以購買");
datamap.put("buy","ok");
System.out.println("giao"+datamap.get("buy"));
}else {
System.out.println("使用者未登入成功,請先登入");
}
}
}
執行結果: