TEST 개발할 때, AAA와 GWT의 차이를 알아보자
in Programming on Test
TEST 개발할 때, AAA와 GWT의 차이를 알아보자
1. AAA (Assignment, Act, Assert)
TDD(Test Driven Development : 테스트 주도개발) 에서 사용되는 용어
1-1. Assignment (준비)
테스트 코드를 실행하기 전에 시스템이 적절한 상태에 있도록함. (ex. 객체생성, 사전 준비에 필요한 api 호출 등)
1-2. Act (실행)
테스트 코드를 실행. 보통 단일 메서드를 호출함
1-3. Assert (단언)
실행한 코드가 기대한 대로 동작하는지 확인. 실행한 코드의 반환값 검사, 새로운 객체의 상태 검사.
2. GWT (Given, When, Then)
BDD(Behaviour Driven Development: 행동기반개발) 에서 사용되는 용어. BDD는 TDD랑 비슷한데, 비즈니스 요구사항에 좀더 집중하여 테스트케이스를 개발한다는것.
2-1. Given (준비)
테스트를 위해 준비하는 과정(변수, 입력값 정의, Mock객체 정의)
2-2. When (실행)
테스트 코드를 실행. (메서드 호출)
2-3. Then (검증)
테스트 검증. (리턴값 검증)
3. 예시
@Test
public void acount_조회_성공() throws Exception {
// Given
String expectedResult = "{\"accountId\":1,\"residence\":\"경북\",\"age\":59}";
AccountDTO account = new AccountDTO(1, "경북", 59);
// When
when(accountService.getAccount(1)).thenReturn(account);
ResultActions result = this.mvc.perform(get("/account/1"));
// Then
result.andExpect(status().isOk()).andExpect(content().json(expectedResult));
}
4. 결론
개인적으로는 그냥 용어차이이고
Assignment = Given
Act = When
Assert = Then
위와 같이 동일한거같다. 개인적으로는 AAA는 좀 개발자 지향적이고 Given, When, Then이 테스트 상황을 더 명료하게 보여주는 워딩이라고 생각하는데 개발자들 위주 프로젝트면 AAA, 타직군과의 협업이 많이 필요하거나 비즈니스로직이 중요한 프로젝트면 GWT 을 쓰는게 좋은거같음. 그냥 개인취향차이..?