@Test
public void if테스트() {
boolean isSuccess = false;
isSuccess = userIdCheck(); // 실패 return
if (isSuccess = false) {
assertThat(isSuccess, is(false));
} else {
fail(“failed test case!!”);
}
}
public boolean userIdCheck() {
return false;
}
위의 테스트 코드는 실패일까? 성공일까?
답은 실패이다.
userIdCheck() 메소드에서 false를 return 받은 후
if 조건문에서 false라면 assertThat 테스트 코드를 만나야 하지만 fail 코드를 만나게 되어 테스트는 실패하게 된다.
이유가 무엇일까?
if (isSuccess = false) <- 이 코드 라인에 문제가 있다.
결론은 대입 연산자를 사용하게 돼서 문제가 발생했던 것이다.
isSuccess = false 가 아니라
isSuccess == false 이다.
사실 위와 같은 실수를 방지하기 위한 가장 좋은 방법은 !isSuccess와 같이 부정문 코드를 작성하는 것이다.
하지만 코드 읽기가 불편하고 명시적이지가 않아 isSuccess == false와 같은 코드를 즐겨 사용한다.
여기서 부정문 코드를 사용하여 미연에 실수를 방지하느냐 아니면 최대한 조심하면서 명시적인 코드를 사용해야 할까?
난 명시적인 코드를 사용하고자 한다.