협력자의 내부에 버그가 있으면 테스트는 실패한다. 즉, 두 테스트는 서로 격리되어 있지 않다
public void openSuccessfully_whenCustomerHasEnoughMoney() { // given Customer customer = new Customer(); Store store = new Store(); customer.addMoney(MoneyType.WON, 1000); // when boolean success = store.open(customer); // then assertThat(success).isEqualTo(true); assertThat(store.isOpen()).isEqualTo(true); assertThat(customer.usedMoney()).isEqualTo(1000) }
public void openSuccessfully_whenCustomerHasEnoughMoney() { // given Customer customer = mock(Customer.class); given(customer.hasEnoughMoney()).thenReturn(true); Store store = new Store(); // when boolean success = store.open(customer); // then assertThat(success).isEqualTo(true); verify(customer, times(1)).hasEnoughMoney(); }
준비 단계에서 테스트는 실제 인스턴스를 생성하지 않고, Customer 의 mock 클래스를 생성함