@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와 같은 코드를 즐겨 사용한다.
여기서 부정문 코드를 사용하여 미연에 실수를 방지하느냐 아니면 최대한 조심하면서 명시적인 코드를 사용해야 할까?
난 명시적인 코드를 사용하고자 한다.
'프로그래밍' 카테고리의 다른 글
XML namespace 이해하기 (0) | 2012.11.06 |
---|---|
jquery checkbox 전체 선택, 전체 해제, 체크 값 추출 (6) | 2012.11.05 |
jquery selector 실습 (1) | 2012.11.02 |
javascript Array객체에 contains 메서드 추가 (2) | 2012.11.02 |
javascript delete 연산자 (0) | 2012.10.29 |
javascript foreach 사용 방법 (1) | 2012.10.29 |
spring 2.5 not supported by MultipartResolver 발생 시 해결 방법 (0) | 2012.10.26 |
java generic에서 E와 T 차이 (5) | 2012.10.24 |