문제

현재 Junit 4를 사용하고 있으며 테스트를 어떤 조합으로 선택적으로 실행할 수있는 그룹으로 나눌 필요가 있습니다. TestNG에는 테스트를 그룹에 할당하기 위해 테스트를 주석을 달 수있는 기능이 있지만 지금 TestNG로 마이그레이션 할 수는 없습니다. Junit에서는 사용자 정의 주석과 맞춤형 주니트 테스트 러너가있는이를 쉽게 달성 할 수 있습니다. 주니트 문서를 모두 확인하고 웹을 검색했지만 그런 것을 찾을 수 없었습니다. 그런 시험자를 알고있는 사람이 있습니까?

업데이트 : 테스트 스위트에 대한 답변에 감사드립니다. 나는 이것을 나의 원래 질문에서 다루어야했다. 여기서 우리는 간다 : 나는 그들이 수동으로 만들고 관리해야하기 때문에 테스트 스위트를 사용하고 싶지 않기 때문에 모든 테스트를 촉감시키고 수동으로 스위트 룸으로 배열하는 것을 의미합니다 (너무 많은 작업과 유지 보수 악몽). 실제로 통합 테스트 인 몇 가지를 제외하고 모든 단위 테스트를 실행하는 것입니다. 그래서 나는 이것들에 주석을 달고 다른 모든 것을 달리고 싶습니다. 다른 경우에는 통합 테스트를 실행하고 싶습니다. 또한 단위 테스트를 여러 그룹에 넣을 필요가 있습니다. 이것이 상황을 정리하는 데 도움이되기를 바랍니다.

업데이트 2 : Junit 에이 OOB가없는 경우 Junit (Annotations + Custom Junit Test Runner)에 추가하는 오픈 소스 라이브러리를 찾고 있습니다.

도움이 되었습니까?

해결책

봄을 확인하십시오 SpringJunit4classRunner. 나는 그것을 사용하여 시스템 속성을 기반으로 테스트를 선택적으로 실행하는 데 사용했습니다. ifprofilevalue 주석.

이것:

@IfProfileValue(name="test-groups", values={"unit-tests", "integration-tests"})
  public void testWhichRunsForUnitOrIntegrationTestGroups() {
      // ...
 }

시스템 속성 '테스트 그룹'이 '단위 테스트'또는 '통합 테스트'로 설정된 경우 실행됩니다.

업데이트: Junitext 가지다 @Category 그리고 @Prerequisite 주석과 필요한 일을 해야하는 것처럼 보입니다. 그러나 나는 그것을 직접 사용한 적이 없으므로 보증 할 수 없습니다.

다른 팁

주니트는 현재 그런 주자가 없습니다. 근본적인 문제를 해결하기 위해 제한된 시간 내에 테스트 스위트로부터 합리적인 보증을 받아야 할 필요성은 다음 릴리스에서 가장 높은 개발 우선 순위입니다. 그 동안 주석을 통해 작동하는 필터를 구현하는 것은 편견이 있지만 큰 프로젝트가 아닌 것 같습니다.

첫째, 단위 테스트 (종종 테스트중인 장치와 동일한 패키지)와 통합 테스트의 두 가지 문제를 해결합니다. 보통 통합 테스트를 COM.Example.Project.Tests와 같은 별도의 패키지로 유지합니다. 일식에서 내 프로젝트는 다음과 같습니다.

project/
  src/
    com.example.project/
  tsrc/
    com.example.project/
    com.example.project.tests/

패키지를 마우스 오른쪽 버튼으로 클릭하고 '실행'을 선택하면 패키지에서 테스트가 실행됩니다. 소스 폴더에서 동일하게 수행하면 모든 테스트가 실행됩니다.

당신은 비슷한 효과를 달성 할 수 있습니다. 스위트 러너. 그러나 이것은 건조를 위반합니다. 스위트 클래스에서 테스트 이름의 사본을 최신 상태로 유지해야합니다. 그러나 여러 스위트에 동일한 테스트를 쉽게 넣을 수 있습니다.

@RunWith(Suite.class)
@Suite.SuiteClasses( { 
    TestAlpha.class, 
    TestBeta.class })
public class GreekLetterUnitTests {
}

물론, 나는이 것들을 자동화해야합니다. 그렇게하는 좋은 방법은 사용하는 것입니다 개미 작업.

<target name="tests.unit">
  <junit>
    <batchtest>
      <fileset dir="tsrc">
        <include name="**/Test*.java"/>
        <exclude name="**/tests/*.java"/>
      </fileset>
    </batchtest>
  </junit>
</target>
<target name="tests.integration">
  <junit>
    <batchtest>
      <fileset dir="tsrc">
        <include name="**/tests/Test*.java"/>
      </fileset>
    </batchtest>
  </junit>
</target>

아니요, 불행히도 TestNG 그룹과 비슷한 개념이 없습니다. Junit4를 위해 계획되었지만 불분명 한 이유는 계획에서 떨어졌습니다.

스위트를 만들 수 있지만 모든 구성을 스위트에 넣지 않고 주석이 아닌 스위트 룸에 넣을 수 있습니다.

Junit 3을 사용하면 다른 테스트와 같이 실행할 수있는 테스트 스위트를 만들 수 있습니다. Junit 4는 비슷한 개념을 가지고 있지 않습니까?

Ant 또는 Maven을 사용하는 경우 테스트를 이름으로 필터링하여 실행되는 테스트를 제어 할 수 있습니다. 조금 어색하지만 그것은 당신에게 효과가있을 수 있습니다.

Testng은 내 투표를했습니다. 주석 기반이며 그룹, 단일 테스트 등으로 실행할 수 있으며 Maven에 연결될 수 있으며 테스트 실행의 일부로 모든 Junit 테스트를 실행할 수 있습니다.

나는 주니트보다 강력히 추천합니다.

제 조언은 단순히 Junit을 DITCH Junit과 TestNG를 사용하는 것입니다. 일단 시험에 익숙해지면 Junit은 석기 시대처럼 보입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top