본문 바로가기
프로그래밍

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

by 탁구치는 개발자 2012. 11. 1.

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


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

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