대입연산자 잘못 쓰면 이렇게 된다.

@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와 같은 코드를 즐겨 사용한다.

여기서 부정문 코드를 사용하여 미연에 실수를 방지하느냐 아니면 최대한 조심하면서 명시적인 코드를 사용해야 할까?

난 명시적인 코드를 사용하고자 한다.