Arrange(준비)
: 테스트에 필요한 초기 상태를 설정합니다.
이 단계에서 테스트하고자 하는 객체나 시스템을 인스턴스화하고 필요한 데이터를 초기화합니다.
Act(실행)
: 실제로 테스트하고자 하는 동작을 수행합니다.
이 단계에서는 테스트하고자 하는 함수 또는 메서드를 호출하거나, 시스템의 기능을 실행합니다.
Assert(단언)
: 테스트 결과를 평가하고 예상한 결과와 실제 결과가 일치하는지 확인합니다.
이 단계에서는 테스트 어설션을 사용하여 테스트의 성공 여부를 결정합니다.
Given(주어진 것)
: 테스트를 실행하기 위해 주어진 초기 상태를 설정합니다.
"Arrange"와 유사하지만, 여기서는 보다 상세하게 테스트 데이터와 객체 상태를 정의합니다.
When(만일)
: 실제로 테스트하고자 하는 동작을 수행하는 단계입니다.
"Act"와 유사하게, 테스트 대상 함수나 시스템 기능을 호출하거나 실행합니다.
Then(그러면)
: 테스트 결과를 평가하고 예상한 결과와 일치하는지 확인하는 단계입니다.
"Assert"와 비슷하게, 테스트 어설션을 사용하여 테스트의 성공 여부를 판단합니다.
function addNumbers(a, b) {
return a + b;
}
function testAddNumbers() {
// Arrange || Given
const a = 2;
const b = 3;
// Act || When
const result = addNumbers(a, b);
// Assert || Then
if (result === 5) {
console.log("Test passed!");
} else {
console.error(`Test failed! Expected 5, but got ${result}`);
}
}
testAddNumbers();
패턴의 이름 자체로도 코드의 의도와 방향성이 다르게 느껴질 수 있기 때문에
저는 두개의 패턴은 두개의 모자
처럼 개발자가 자신이 작성 또는 수정해야되는 코드를 명확히 구분해 작업할 수 있도록, 하기 위해서 있다고 생각합니다.