[java] JUnit 클래스를 특수 테스트 패키지로 분리?
저는 이전 질문 인 “JUnit 및 적절한 소프트웨어 엔지니어링 학습을위한 샘플 프로젝트” 에 대한 답변에서 권장 하는 Craftsman 기사 ( 주제별 아래에서 Craftsman 클릭) 를 읽고 테스트 주도 개발의 개념 을 배우고 있습니다. 나는 그것을 지금까지 좋아한다!
하지만 지금은 앉아서 직접 해보고 싶습니다. 간단한 답변 만 필요하다는 질문이 있습니다.
JUnit 테스트 클래스와 실제 코드를 어떻게 구성합니까? 나는 주로 패키지 구조에 대해 이야기하고 있지만, 다른 어떤 개념도 도움이 될 것입니다.
org.myname.project.test. *에 테스트 클래스를 넣고 org.myname.project. *에 일반 코드를 넣습니까? 시험 수업을 일반 수업과 나란히 배치합니까? 클래스 이름에 접미사를 붙이는 대신 Test를 접두사로 붙이는 것을 선호합니까?
조만간 걱정하지 말아야 할 일처럼 보이지만 저는 조직 중심적인 사람입니다. 난 거의 오히려 실제로 일을 얻는 것보다 수행하려면 무엇을 추적하는 방법을 알아내는 더 많은 시간을 소비하는 사람의 종류.
그리고 현재는 패키지로 깔끔하게 분할 된 프로젝트가 있는데 프로젝트가 엉망이되었습니다. 모든 것을 리팩토링하고 테스트를 작성하는 대신 처음부터 테스트를 새로 시작하고 싶습니다. 하지만 먼저 테스트가 어디로 가는지 알아야합니다.
편집 : 나는 Maven에 대해 완전히 잊었지만 대다수가 그것을 사용하고있는 것 같습니다! 과거에는 Maven이 저를 완전히 망가 뜨리는 특정 사용 사례가 있었지만 Ant는 내게 필요한 유연성을 제공했기 때문에 결국 Ant에 연결되었지만 잘못된 접근 방식을 취한 것 같습니다. 테스트 기반 개발과 잘 어울릴 것 같기 때문에 Maven을 다시 시도해 보겠습니다.
답변
테스트 클래스를 테스트하는 프로젝트 클래스와 동일한 패키지에 넣는 것을 선호하지만 다음과 같이 다른 물리적 디렉토리에 저장합니다.
myproject/src/com/foo/Bar.java
myproject/test/com/foo/BarTest.java
Maven 프로젝트에서는 다음과 같습니다.
myproject/src/main/java/com/foo/Bar.java
myproject/src/test/java/com/foo/BarTest.java
이것의 요점은 내 테스트 클래스가 패키지 범위 클래스와 멤버에 액세스하고 테스트 할 수 있다는 것입니다.
위의 예에서 볼 수 있듯이 내 테스트 클래스에는 테스트 된 클래스의 이름과 Test
접미사가 있습니다. 이것은 그것들을 빨리 찾는 데 도움이됩니다. 각각의 이름이 Test
…로 시작하는 수백 개의 테스트 클래스 중에서 검색을 시도하는 것은 그리 재미 있지 않습니다 .
@Ricket의 의견에서 영감을 얻은 업데이트 :이 방식으로 테스트 클래스 (일반적으로)가 테스트 된 친구 바로 뒤에 프로젝트 별 알파벳순 클래스 이름 목록이 표시됩니다. (의식적으로 그 방법을 깨닫지 못한 채 매일 이로부터 혜택을 받고 있다는 사실이 재밌습니다 …)
Update2 : Maven을 좋아하는 개발자 (저를 포함하여)가 많이 있지만, 적어도 그렇지 않은 개발자는 많은 것 같습니다. IMHO는 “주류”Java 프로젝트에 매우 유용합니다 (프로젝트의 약 90 %를이 범주에 넣 겠지만 나머지 10 %는 여전히 상당한 소수입니다). Maven 규칙을 받아 들일 수 있다면 사용하기 쉽습니다. 그러나 그렇지 않다면 그것은 삶을 비참한 투쟁으로 만듭니다. Maven은 매우 다른 사고 방식이 필요하기 때문에 Ant에서 사회화 된 많은 사람들에게 이해하기 어려운 것 같습니다. (Ant를 사용한 적이없는 나 자신은이 둘을 비교할 수 없습니다.) 한 가지는 확실합니다. 단위 (및 통합) 테스트를 프로세스에서 자연스럽고 일류 단계로 만들어 개발자가이 필수 관행을 채택하는 데 도움이됩니다.
답변
테스트 클래스와 동일한 패키지에 테스트 클래스를 넣었 지만 다른 소스 폴더 나 프로젝트에 넣었습니다 . 이러한 방식으로 테스트 코드를 구성하면 프로덕션 jar 파일에 테스트 코드가 포함되지 않도록 쉽게 컴파일하고 별도로 패키징 할 수 있습니다. 또한 테스트 코드가 패키지 비공개 필드 및 메서드에 액세스 할 수 있습니다.
답변
나는 Maven을 사용 합니다. Maven이 추진하는 구조는 다음과 같습니다.
src/main/java/org/myname/project/MyClass.java
src/test/java/org/myname/project/TestMyClass.java
즉, 테스트중인 클래스 이름 앞에 Test가 추가 된 테스트 클래스는 주 테스트에 대한 병렬 디렉토리 구조에 있습니다.
동일한 패키지 (반드시 디렉터리는 아님)에 테스트 클래스를 포함하는 한 가지 장점은 패키지 범위 메서드를 활용하여 모의 테스트 개체를 검사하거나 삽입 할 수 있다는 것입니다.