延伸先前計算相關的方法測試,我們補齊加減乘除各種方法跟測試
public class Calculator {
public int add(int x, int y) {
return x + y;
}
public int subtract(int x, int y) {
return x - y;
}
public int multiply(int x, int y) {
return x * y;
}
public int divide(int x, int y) {
if (y == 0) {
throw new IllegalArgumentException("Cannot divide by zero");
}
return x / y;
}
}
測試類也加上對應的測試
class CalculatorTest {
@Test
public void testAdd() {
Calculator calc = new Calculator();
int result = calc.add(1, 1);
assertEquals(2, result);
}
@Test
public void testSubtract() {
Calculator calc = new Calculator();
int result = calc.subtract(3, 1);
assertEquals(2, result);
}
@Test
public void testMultiply() {
Calculator calc = new Calculator();
int result = calc.multiply(3, 2);
assertEquals(6, result);
}
@Test
public void testDivide() {
Calculator calc = new Calculator();
int result = calc.divide(2, 2);
assertEquals(1, result, "result should be 1");
assertThrows(IllegalArgumentException.class, () -> {
calc.divide(2, 0);
});
}
}
把這些註解都應用到我們的測試案例裡
class CalculatorTest {
private Calculator calc;
@BeforeEach
void initCalculator() {
System.out.println("-----每個項目執行前我都執行一次 @BeforeEach-----");
calc = new Calculator();
}
@AfterEach
void tearDownCalculator() {
System.out.println("-----每個項目執行完我都執行一次 @AfterEach-----");
calc = null;
}
@BeforeAll
static void beforeAll() {
System.out.println("=====全部開始前是我 @BeforeAll=====");
}
@AfterAll
static void afterAll() {
System.out.println("=====全部結束後是我 @AfterAll=====");
}
@Test
@DisplayName("加法測試")
public void testAdd() {
System.out.println("執行 testAdd()");
int result = calc.add(1, 1);
assertEquals(2, result);
}
@Test
@DisplayName("減法測試")
public void testSubtract() {
System.out.println("執行 testSubtract()");
int result = calc.subtract(3, 1);
assertEquals(2, result);
}
@Test
public void testMultiply() {
System.out.println("執行 testMultiply()");
int result = calc.multiply(3, 2);
assertEquals(6, result);
}
@Test
@Disabled
public void testDivide() {
System.out.println("執行 testDivide()");
int result = calc.divide(2, 2);
assertEquals(1, result, "result should be 1");
assertThrows(IllegalArgumentException.class, () -> {
calc.divide(2, 0);
});
}
}
可以觀察到前面的方法因為都需要初始化 Calculator ,所以可以運用到 @BeforeEach 這個註解來幫我們讓程式碼更簡潔。
每個測試結束後也可以加入 @AfterEach 來進行特定處理,這邊就假設我們需要釋出空間把 calc 清空
依據測試需要也可以用 @BeforeAll @AfterAll 可以在最一開始及最後進行一些處理,不管你執行的是單項測試或是全部一起,這兩種都會最先和最後被執行。
@DisplayName 則是可以直接改變執行結果顯示的測試名稱
@Disabled 會跳過該項目,不被執行,但還是會在執行結果中顯示有被禁用
把每個執行都加上 log 之後可以看一下執行結果
可以看到對應的 log 就知道那些執行的順序,是否回想起這就是 AOP 的應用了!! 其實在測試撰寫的時候也都會用到這樣的概念。
Ref:
相關文章也會同步更新我的部落格,有興趣也可以在裡面找其他的技術分享跟資訊。