서론

**메소드의 실행에 따른 상태 변화를 테스트**하기 위해 given-when-then 세 구조로 이루어진 패턴이다.

주어진 상태(given) → 대상의 행위로 상태 변화가 생김(when) → 실행 후 기대하는 상태로 완료(then)


given

메소드를 텅 빈 stub 상태로 불러오고 실행 결과를 조작할 상태를 지정한다.

given(testRepository.findById(mockId)) // 이 메소드를 불러와서
	      .willReturn(Optional.empty()) // 이 상태로 조작한다

tip

mockito에서는 given 단계에서 실행해야 할 **메소드의 이름을 when으로 두어서 헷갈릴 여지**가 있다.

이때문에 BDDMockito에서는 **기능은 동일**하지만 **메소드의 이름을 given으로 두어서 가독성**을 높였다.


when

given으로 정해진 상태를 테스트하기 위해 상태 변화를 가한다. (즉, 메서드를 실행시킴)

Executable executable = () -> testService.execute(mockId);

then