중요 학습 내용 [JDBC]
TEST
- 테스트는 기본적으로 1. given, 2. when, 3. then의 개념으로 진행
- 단위 테스트: layered architecture에서 각 계층마다 단위 메소드를 테스트
- 통합 테스트: layer 단위가 아닌 전체 기능 동작에 대해 테스트
- 테스트 케이스: 테스트 대상이 되는 기능을 시나리오 별로 테스트
- Junit 프레임워크로 Assertions를 통해 여러 메서드를 호출하여 테스트를 할 수 있다.
- 메소드 종류
- assertEquals()
- assertNull()
- assertNotNull()
- assertAll()
- assertThrows()
- assertInstanceOf()
- etc
- 메소드 체이닝 방식
String expected = "hello world";
String actual = new String(expected);
Assertions.assertThat(actual)
.isNotEmpty()
.isNotBlank()
.contains("hello")
.doesNotContain("hahah")
.startsWith("h")
.endsWith("d")
.isEqualTo("hello world");
double pi = Math.PI;
Double actual = Double.valueOf(pi);
Assertions.assertThat(actual)
.isPositive()
.isGreaterThan(3)
.isLessThan(4)
.isEqualTo(Math.PI);
String birthday = "2014-09-18T16:42:00.000";
LocalDateTime theDay = LocalDateTime.parse(birthday);
System.out.println("theDay: " + theDay.toString());
Assertions.assertThat(theDay)
.hasYear(2014)
.hasMonthValue(9)
.hasMonth(Month.SEPTEMBER)
.hasDayOfMonth(19)
.isBetween("2014-01-11T00:00:00.000", "2014-12-31T23:59:59.999")
.isBefore(LocalDateTime.now());
Throwable thrown = AssertionsForClassTypes.catchThrowable(
() -> {
throw new IllegalArgumentException("wrong parameters entered");
}
);
Assertions.assertThat(thrown)
.isInstanceOf(IllegalArgumentException.class)
.hasMessageContaining("parameter");
Member member1 = new Member(1, "user01", "유관순", 16);
Member member2 = new Member(2, "user02", "홍길동", 20);
Member member3 = new Member(3, "user03", "이순신", 40);
Member member4 = new Member(4, "user04", "임꺽정", 43);
Member member5 = new Member(5, "user05", "심사임당", 19);
List<Member> members = Arrays.asList(
member1,
member2,
member3,
member4,
member5
);
Assertions.assertThat(members)
.filteredOn(member -> member.getAge() > 20)
.containsOnly(member3, member4);
Member member1 = new Member(1, "user01", "유관순", 16);
Member member2 = new Member(2, "user02", "홍길동", 20);
Member member3 = new Member(3, "user03", "이순신", 40);
Member member4 = new Member(4, "user04", "임꺽정", 43);
Member member5 = new Member(5, "user05", "심사임당", 19);
List<Member> members = Arrays.asList(
member1,
member2,
member3,
member4,
member5
);
Assertions.assertThat(members)
.filteredOn("age", 20)
.containsOnly(member2);
Lifecycle Annotation
@BeforeAll
public static void beforeAll() {
System.out.println("Before All");
}
@BeforeEach
public void beforeEach() {
System.out.println("Before Each");
}
@Test
public void test1() {
System.out.println("Test1");
}
@Test
public void test2() {
System.out.println("Test2");
}
@AfterEach
public void afterEach() {
System.out.println("After Each");
}
@AfterAll
public static void AfterAll() {
System.out.println("After All");
}
Additional Annotation
@Disabled
@Test
public void testIgnore() {
System.out.println("skipped test");
}
@Test
@Timeout(value = 1000, unit = TimeUnit.MILLISECONDS)
public void testTimeout() throws InterruptedException{
Thread.sleep(900);
System.out.println("timeout test");
@Test
@Order(1)
public void testFirst() {
System.out.println("first test");
}
@Test
@Order(3)
public void testThird() {
System.out.println("third test");
}
@Test
@Order(2)
public void testSecond() {
System.out.println("second test");
}
@RepeatedTest(10)
public void testRepeat() {
System.out.println("repeated test");
}
@ParameterizedTest
- 테스트케이스를 줄일 수 있다.
- @ValueSource()를 통해 given 설정
@DisplayName("홀수 짝수 판별 테스트")
@ParameterizedTest
@ValueSource(ints = {1, 3, -1, 15, 1233})
void testIsOdd (int number) {
boolean result = NumberValidator.isOdd(number);
Assertions.assertTrue(result);