Young Jun Park (박영준)
Java back-end developer
Park Young Jun
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public int subtract(int a, int b) {
return a - b;
}
public int multiply(int a, int b) {
return a * b;
}
public int divide(int a, int b) {
return a / b;
}
}
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class CalculatorTest {
@Test
public void addTest() {
Calculator calculator = new Calculator();
int result = calculator.add(1, 2);
assertEquals(3, result);
}
}
calculator.add(1, 2) 의 결과 (result) 가 3이 되길 기대한다.
public class CalculatorTest {
@Test
public void addTest() {
Calculator calculator = new Calculator();
int result = calculator.add(1, 2);
assertEquals(3, result);
}
@Test
public void subtractTest() {
Calculator calculator = new Calculator();
int result = calculator.subtract(5, 3);
assertEquals(2, result);
}
}
public class CalculatorTest {
private Calculator calculator;
@Before
public void setUp() {
calculator = new Calculator();
}
@Test
public void addTest() {
int result = calculator.add(1, 2);
assertEquals(3, result);
}
@Test
public void subtractTest() {
int result = calculator.subtract(5, 3);
assertEquals(2, result);
}
}
각 @Test 가 실행되기 전에 @Before가 실행됨
public class CalculatorTest {
private Calculator calculator;
@Before
public void setUp() {
calculator = new Calculator();
System.out.println("setup");
}
@Test
public void addTest() {
int result = calculator.add(1, 2);
assertEquals(3, result);
System.out.println("add");
}
@Test
public void subtractTest() {
int result = calculator.subtract(5, 3);
assertEquals(2, result);
System.out.println("subtract");
}
@After
public void tearDown() {
System.out.println("tearDown");
}
}
setup
add
tearDown
setup
subtract
tearDown
org.junit.Assert 패키지
code | 설명 |
---|---|
assertEquals(expected, actual) | 두 값이 같은지 확인 |
assertTrue(expected) assertFalse(expected) |
참 / 거짓을 확인 |
assertNull(expected) assertNotNull(expected) |
객체의 null 여부 확인 |
assertSame(expected, actual) assertNotSame(expected, actual) |
두 객체의 동일성 여부 확인 |
assertArrayEquals(expected, actual) | 두 배열이 같은지 확인 |
Hamcrest Matcher?
// hamcrest-core example
assertThat(result, is(3));
assertThat(result, is(not(3)));
assertThat(result, is(nullValue()));
assertThat(result, is(notNullValue()));
assertThat(list, hasItems("apple", "banana"));
assertThat(list, not(hasItems("apple", "banana")));
assertThat("testString", containsString("test"));
assertThat("testString", startsWith("t"));
assertThat("testString", endsWith("g"));
AssertJ ?
assertThat(테스트 타켓).메소드1().메소드2().메소드3();
AssertJ String Test example
assertThat("Hello, world! Nice to meet you.")
.isNotEmpty()
.contains("Nice")
.contains("world")
.doesNotContain("ZZZ")
.startsWith("Hell")
.endsWith("u.")
.isEqualTo("Hello, world! Nice to meet you.");
AssertJ Number Test example
assertThat(3.14d) // 주어진 3.14라는 숫자는
.isPositive() // 양수이고
.isGreaterThan(3) // 3보다 크며
.isLessThan(4) // 4보다 작고
.isEqualTo(3, offset(1d)) // 오프셋 1 기준으로 3과 같고
.isEqualTo(3.1, offset(0.1d)) // 오프셋 0.1 기준으로 3.1과 같으며
.isEqualTo(3.14); // 오프셋 없이는 3.14와 같다
AssertJ Collection Test example
assertThat(Arrays.asList("apple", "banana", "orange", "mango"))
.isNotNull()
.isNotEmpty()
.contains("apple", "banana")
.doesNotContain("kiwi")
.containsExactlyInAnyOrder("mango", "orange", "banana", "apple")
.containsSubsequence("banana", "orange")
.startsWith("apple")
.endsWith("mango")
.containsExactly("apple", "banana", "orange", "mango");
동일한 테스트를 입력 값(조건)을 바꿔가면서 여러번 테스트 할때 사용
@RunWith(Parameterized.class)
public class CalculatorTest2 {
@Parameter(value = 0) public int a;
@Parameter(value = 1) public int b;
@Parameter(value = 2) public int expected;
private Calculator calculator;
@Parameters
public static Object[][] data() {
return new Object[][]{
{1, 2, 3},
{10, 20, 30},
{100, 200, 300},
{1000, 2000, 3000}
};
}
@Before
public void setUp() {
calculator = new Calculator();
}
@Test
public void addTest() {
assertThat(calculator.add(a, b)).isEqualTo(expected);
}
}
1. 실행 시간 테스트
@Test(timeout = 2000)
public void addTest() {
assertThat(calculator.add(a, b)).isEqualTo(expected);
}
2. 예외 발생 테스트
@Test(expected = RuntimeException.class)
public void addTest() {
assertThat(calculator.add(a, b)).isEqualTo(expected);
}
숫자 야구 게임 TDD :
TDD로 문자열 계산기 만들기 :
By Young Jun Park (박영준)
기본적인 JUnit의 동작 방식 및 사용법에 설명합니다.