JUnit의 예전 테스트 메서드는 왜 public만 허용했을까? + 왜 void만 반환해야할까?

Y_Sevin·2023년 4월 9일
0

JUnit

목록 보기
2/3

😅 필자가 개인적으로 공부하고 남기는 것이기 때문에 정보가 미흡할 수 있습니다. 잘못된 내용이 있을경우 지적해주신다면 감사히 받겠습니다.

1. 왜 테스트메서드는 public일까? 🤔

Junit5로 업데이트되며 접근제어자가 public에서 private를 제외한 접근제어자를 사용하더라도 테스트를 진행할 수 있게 되었다.
Junit은 테스트 클래스의 테스트 메소드를 Reflection API를 이용해 호출한다. 때문에 public이 아니더라도 충분히 접근할 수 있는데 왜 굳이 public으로 막았을까?

💻 Reflection - public

Java의 Reflection은 클래스, 메서드, 필드 등에 대한 정보를 동적으로 얻거나 조작할 수 있다.
때문에 JDK 1.1에서는 Reflection을 통한 접근이 단순하게 구현되어 있어, public 멤버에 대한 접근만을 허용했다.

왜냐하면 public 멤버에 대한 접근만을 허용함으로써, 보다 예측 가능하고 안전한 프로그래밍 환경을 제공하고자 했기 때문이다.

때문에 Reflection을 사용하는 JUnit의 테스트 메소드 또한 public 메서드만 접근 가능했던 것이다. Reflection의 접근제어자는 JUnit4이전에도 public외에 접근이 가능했지만 전통적인 이유로 계속 유지된 것 같다.

JDK1.2부터는 Reflection 의 접근 제어자에 대한 제한이 완화하게 되면서, 다양한 상황에 Reflection이 유연하게 사용되도록 하고 있다.

2. 왜 테스트 메서드는 void로 선언되어야 할까? 😮

JUnit에서 return 타입은 해당 테스트 메서드가 성공적으로 실행되었는지 여부를 나타낸다.
return 타입이 void인 경우 JUnit은 해당 테스트 메서드가 정상적으로 종료되었음을 간주하고 예외를 던지면 해당 테스트의 실패했다고 간주하게 된다.

때문에 모든 테스트 결과는 void or exception으로 반환되며 일관성 있고 신뢰성 있는 테스트 환경을 유지할 수 있다.

만약 테스트 메서드가 다양한 반환 타입을 가질 수 있다면, 테스트 결과의 해석이 모호해질 수 있기에 return 타입을 void로 고정시키고 있다.

참고

profile
매일은 아니더라도 꾸준히 올리자는 마음으로 시작하는 개발블로그😎

0개의 댓글