programming2 MIN READ

TEST 개발할 때, AAA와 GWT의 차이를 알아보자

TEST 개발할 때, AAA와 GWT의 차이를 알아보자

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 을 쓰는게 좋은거같음. 그냥 개인취향차이..?