Table of contents
2 JUnit 4
2.1 Maven dependencies
1<dependency>
2 <groupId>junit</groupId>
3 <artifactId>junit</artifactId>
4 <version>4.13.2</version>
5 <scope>test</scope>
6</dependency>
如果係用緊新版既 Spring Boot,咁佢就已經用緊 JUnit 5。JUnit 5 係一個完全唔同既新版,所以如果要用返 JUnit 4 既話,可以用以下既 dependency,裡面已經包括左 junit
版本 4.x
:
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<scope>test</scope>
</dependency>
2.2 寫 Java code
Production code:
1public final class StringUtils {
2
3 private StringUtils() {}
4
5 public static boolean isBlank(String str) {
6 return str==null
7 || str.isEmpty()
8 || str.chars().allMatch(Character::isWhitespace);
9 }
10}
Test code:
1public class StringUtilsTest {
2
3 @Test
4 public void test_isBlank_null() {
5 Assert.assertTrue(StringUtils.isBlank(null));
6 }
7
8 @Test
9 public void test_isBlank_emptyString() {
10 Assert.assertTrue(StringUtils.isBlank(""));
11 }
12
13 @Test
14 public void test_isBlank_spaces() {
15 Assert.assertTrue(StringUtils.isBlank(" "));
16 }
17
18 @Test
19 public void test_isBlank_specialWhitespaceCharacter1() {
20 Assert.assertTrue(StringUtils.isBlank("\u005Ct"));
21 }
22
23 @Test
24 public void test_isBlank_specialWhitespaceCharacter2() {
25 Assert.assertTrue(StringUtils.isBlank("\u005Cn"));
26 }
27
28 @Test
29 public void test_isBlank_someCharacters() {
30 Assert.assertFalse(StringUtils.isBlank("a"));
31 }
32}
2.3 JUnit API
2.3.1 Annotations
2.3.1.1 @Test
最基本會畀 JUnit pick up 去 run 既 test method:
@Test
public void test() {
// test code
}
如果期望個 test 會出 exception:
@Test(expected = RuntimeException.class) // 改成我地期望既 exception class
public void test() {
throw new RuntimeException();
}
2.3.1.2 @Before
有時我地會想喺每個 test case 行之前 set 一啲野,咁可以加個 method(method 名冇所謂):
@Before
public void setUp() {
// do something
}
2.3.1.3 @BeforeClass
同樣地,如果只想喺行成個 test class 一開始行一次去 set 一啲野,咁可以加個 static method(method 名冇所謂):
@BeforeClass
public static void setUpOnce() {
// do something
}
2.3.1.4 @After
如果需要喺每個 test case 行完之後收拾返一啲野,咁可以加個 method(method 名冇所謂):
@After
public void tearDown() {
// do something
}
2.3.1.5 @AfterClass
同樣地,如果只想喺行成個 test class 最後尾行一次去收拾返一啲野,咁可以加個 static method(method 名冇所謂):
@AfterClass
public static void tearDownOnce() {
// do something
}
2.3.2 Assertion methods
2.3.2.1 assertNull
、assertNotNull
Assert.assertNull(null);
Assert.assertNotNull("");
2.3.2.2 assertTrue
、assertFalse
Assert.assertTrue(true);
Assert.assertFalse(false);
2.3.2.3 assertEquals
final String expected = "Hello World!";
final String actual = "Hello" + " " + "World!";
Assert.assertEquals(expected, actual);
2.3.2.4 fail
如果想個 test method 去到某一行就會 fail 左個 test case,就用呢句:
Assert.fail();
2.4 Parameterized test
1@RunWith(Parameterized.class)
2@FieldDefaults(level = PRIVATE)
3@AllArgsConstructor
4public class MyParameterizedTest {
5
6 String value;
7 boolean expected;
8
9 @Parameters
10 public static Collection<Object[]> params() {
11 return Arrays.asList(new Object[][] {
12 { "123", false },
13 { "", true }
14 });
15 }
16
17 @Test
18 public void test() {
19 final boolean actual = StringUtils.isBlank(value);
20 Assert.assertEquals(expected, actual);
21 }
22}
參考資料: