2009-05-01 5 views
44

유닛 테스트 구성에 관해 2 가지 질문이 있습니다.JUnit 테스트는 어디에 두어야합니까?

  1. 테스트 된 클래스와 동일한 패키지에 테스트를 적용해야합니까, 아니면 다른 패키지로 테스트를 구성 할 수 있습니까?

    예를 들어

    내가 유효성다른 시험이있는 경우, 그것은 그들이 같은 클래스의 경우에도, 다른 패키지로 분할하는 것이 맞습니까?

  2. 가짜 및 스텁 클래스는 어떻게됩니까? 테스트 만 포함 된 패키지와 패키지를 분리해야합니까?

답변

56

JUnit 테스트 케이스의 방법은 동일한 패키지에 있지만 다른 루트 디렉토리에 넣는 것입니다. Maven을 사용하기 때문에 표준 위치를 사용하여 다음과 비슷한 구조를 만듭니다.

src/main/java/com/foo/Bar.java 
src/test/java/com/foo/BarTest.java 

는 물론 구조에 더있다, 그러나 이것은 우리가 여전히 보호 클래스와 같은 액세스 메인 라인의 코드에서 별도로 테스트를 구축,하지만 할 수 있습니다. 다른 유형의 테스트와 관련해서는 매우 주관적입니다. 우리가 테스트를 시작했을 때 (불행히도 개발 후 시작), 나는 꽤 고립 된 상태로 유지하려고 노력했다. 불행히도, 우리가 500+ 테스트 케이스 포인트에 도달했을 때 그것은 곧 악몽이되었습니다. 그 후 나는 더 많은 통합을 시도했다. 이로 인해 유지 관리되는 코드 양이 줄어 들었습니다. 내가 말했듯이, 그것은 매우 주관적입니다.

테스트 전용 코드는 src/test/java 트리에만있는 별도의 com.foo.test 패키지에 보관합니다.

+13

"src/com/foo/..."및 "test/com/foo/..."를 사용한다는 점을 제외하면 비슷한 점이 있습니다. –

+0

개인적으로, 나는 Bob의 대답을 훨씬 잘 찾았습니다. JUnit 테스트가 소스 코드 일지라도. – guerda

+3

솔직히 내가 src/main/java 및 src/test/java를 사용하는 유일한 이유는 Maven의 추가 구성을 할 필요가 없기 때문입니다. –

3

테스트 클래스는 다른 패키지에 있어야하며 릴리스 용으로 패키징 할 때 프로덕션 코드에서 분리하는 것이 더 쉽습니다. 나는 대개 그 패키지들, 모든 종류의 모의 (mock), 구성, 시나리오들에서 많은 테스트를하고있다.하지만 당신이 빌드 할 때 - 그것을 얻지는 못한다. 어떤 상황에서는 테스트 프로젝트를 다른 프로젝트에도 그대로 두는 것이 좋습니다. 달려있어.

2

동일한 패키지를 유지하면 테스트를 통해서만 액세스 할 수있는 코드에 패키지 개인용 가시성을 사용할 수 있습니다.

별도의 루트 디렉토리 사용과 관련하여 좋은 사례입니다. 또한 IDEA를 사용하기 때문에 우리에게 이점이 있습니다. IDEA는 생산 코드가 테스트 코드를 참조 할 수 없다는 것을 인식합니다.

개별적으로 유지한다는 측면에서 볼 때, 단위 수준에서 생산 클래스 당 하나의 테스트 클래스 만 있으면 큰 힘이 있습니다. 물론 일부 클래스는 테스트 클래스가 전혀없는 리팩토링의 일부로 프로덕션에서 만들어지며 괜찮습니다.하지만 어떤 테스트 테스트에서 ClassNameTest가 ClassName에 대한 테스트라는 규칙을 갖고 있는지 알고 싶을 때 매우 도움이됩니다.

TestNG는 JUnit보다이 패러다임에 훨씬 더 친숙합니다.

3

같은 패키지에 있지만 다른 루트 디렉토리에 테스트를 적용하는 경향이 있습니다. 이를 통해 패키지 개인 클래스를 테스트하거나 포장 개인 클래스에 액세스하여 패키지의 다른 것을 테스트 할 수 있습니다. 그것들은 별도의 디렉토리 트리에 보관되어 배포 된 결과에서 제외 될 수 있습니다 (특히 테스트 코드가 실수로 생산 코드에 포함되지 않도록). 그러나 가장 중요한 것은 귀하의 상황에 적합한 것입니다.

프로덕션 클래스 당 테스트 클래스의 수에 관해서는 설치 구조별로 하나의 테스트 클래스를 작성한다는 이론이 있습니다. 많은 경우 프로덕션 클래스 당 하나의 테스트 클래스와 동일하거나 충분히 가깝지만 때때로 프로덕션 클래스를 제공하기 위해 더 많은 테스트 클래스 (특히 평등 테스트가 분리되는 경향이 있음)를 작성하고 경우에 따라 (관련) 프로덕션 클래스 그룹 (예 : 전략 패턴 테스트 용).

대부분 이론상 너무 걱정하지 않지만 중복을 최소화하려면 필요에 따라 테스트를 다시 수행하십시오.

관련 문제