π μ€λμ νμ΅ ν€μλ
- Given - When - Then
π₯ Given - When - Then
: Given - When - Then ν¨ν΄μ Test Code μ€νμΌμ νννλ λ°©μμ λ»ν©λλ€.
Given
: ν μ€νΈ νκ³ μνλ λμμ μ€μ λ‘ μ€ννκΈ° μ μ ν μ€νΈμ νμν κ°(μν)μ 미리 μ μΈν΄ λ‘λλ€.
When
: ν μ€νΈ νκ³ μνλ λμμ μ€μ λ‘ μ€ν μν΅λλ€.
Then
: μ΄λ€ νΉμ ν νλ(ν μ€νΈ λμ μ€ν) λλ¬Έμ λ°μν κ±°λΌκ³ μμλλ κ²°κ³Όμ λν΄ μμΈ‘νκ³ λ§λμ§ νμΈν©λλ€.
class CalculatorTest {
Calculator calculator;
@BeforeEach
void setUp() {
calculator = new Calculator();
}
@Test
@DisplayName("κ³μ°κΈ° μ°μ° μ±κ³΅ ν
μ€νΈ")
void test1() {
// given
int num1 = 5;
String op = "/";
int num2 = 2;
// when
Double result = calculator.operate(num1, op, num2);
// then
assertNotNull(result);
assertEquals(2.5, result);
}
@Test
@DisplayName("κ³μ°κΈ° μ°μ° μ€ν¨ ν
μ€νΈ : λΆλͺ¨κ° 0μΌ κ²½μ°")
void test1_1() {
// given
int num1 = 5;
String op = "/";
int num2 = 0;
// when
Double result = calculator.operate(num1, op, num2);
// then
assertNull(result);
}
@Test
@DisplayName("κ³μ°κΈ° μ°μ° μ€ν¨ ν
μ€νΈ : μ°μ°μκ° μλͺ»λμ κ²½μ°")
void test1_2() {
// given
int num1 = 5;
String op = "?";
int num2 = 2;
// when - then
IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> calculator.operate(5, "?", 2));
assertEquals("μλͺ»λ μ°μ°μμ
λλ€.", exception.getMessage());
}
}
π₯ F.I.R.S.T μμΉ
μ’μ ν μ€νΈλ₯Ό μν F.I.R.S.T μμΉ
Fast : λ¨μ ν μ€νΈλ λΉ¨λΌμΌνλ€.
Independent : λ¨μ ν μ€νΈλ κ°κ°μ ν μ€νΈκ° μ°κ΄λμ§ μκ³ , κ³ λ¦½λμ΄μΌ νλ€. μ¦, λ 립μ μ΄μ΄μΌ νλ€.
Repeatable : λ¨μν μ€νΈλ λ°λ³΅ κ°λ₯ν΄μΌνλ€. λ°λ³΅μ μΌλ‘ μνν΄λ κ²°κ³Όλ κ°μμΌ νλ€.
Self-validating : μ체μ μΌλ‘ ν μ€νΈ κ²°κ³Όκ° λμΆλμΌνλ€.
(κ°λ°μκ° print μ°μ΄μ λΉκ΅νλκ² μλκ³ , μλμΌλ‘ μνλλ©° μ±κ³΅/μ€ν¨μ κ²°κ³Όκ° λμ€λ κ²)
Timely : λ¨μ ν μ€νΈλ μ€μ μ½λλ³΄λ€ λ¨Όμ ꡬνν΄μΌ νλ€. (TDDμΌ κ²½μ°μλ§ ν΄λΉ)
π μ€λμ νκ³
μ£Όλ§ μ΄μ¬ν ν©μλ€!!