2013-05-21 2 views
0

데이터를 캐시에로드하고 테스트 케이스를 실행하는 테스트 케이스가 여러 개 있습니다. 테스트 케이스가 잘 실행되지만 캐시가 오래 걸리면 모든 테스트 케이스를 실행했을 때 각 테스트 케이스에 대해 매번로드됩니다. 캐시를 한 번로드 한 다음 모든 테스트 케이스에서 캐시를 사용할 수있는 방법이 있습니까?모든 junit 테스트 케이스에서 재사용 캐시

한 가지 방법은 모든 테스트 사례를 한 클래스에 넣는 것이지만 결과를 분석하기가 어렵 기 때문에 용도를 벗어납니다 (각 클래스에 약 5-10 개의 테스트 메소드가 있으며 약 30 개의 테스트 클래스가 있습니다 그래서 생성 된 보고서는 매우 커져서 조직화되지 않을 것입니다.) 테스트 스위트를 사용해 보았지만 캐시가 하나씩 실행될 때마다 각 테스트 케이스마다 종료되고 있습니다.

+0

일반 관찰 - 그것은 어떤 보장 각 테스트를 생성, 캐시를 만들기 위해 걸릴 걸릴 수 있습니다 동안 당신의 검사는 서로를 오염시킬 수 없습니다. 그것이 읽기 전용 캐시가 아니라면 ..? –

+0

나중에 오염 될 수 있습니다 ...하지만 우리는 또한 개별적으로 테스트 케이스를 실행하고 있습니다 ... 모든 테스트 케이스를 실행하는 최종 실행은 모든 것이 잘 작동하는지 테스트 env에 배치하기 직전입니다. – AutoMEta

+0

복제/복사가 가능합니까? 캐시? 아마도 그러면 캐시를 한 번 만들고 각 테스트마다 복사 할 수 있습니다. –

답변

0

나는 @BeforeClass이 귀하의 요구를 충족시킬 것이라고 생각했을 것입니다.

때로는 몇 가지 테스트 (데이터베이스에 로그인 등) 계산 비용 설치 을 공유 할 필요가있다. 이 경우 시험의 독립성이 저하 될 수 있지만 때때로 최적화가 필요합니다. 이 클래스에서 테스트 방법 중 하나 전에 한 번 실행되는 @BeforeClass와 공공 정적 무효 인수 없음의 방법을 주석 가 발생

당신은 슈퍼 클래스 내에서이 사용을 할 수 있습니다

이후의 서브 클래스를 단순화 할 수있다 귀하의 코드/테스트 조직.

+1

"*이 작업을 수행하는 한 가지 방법은 모든 테스트 케이스를 하나의 클래스에 넣는 것이지만 결과가 분석하기가 어렵 기 때문에 용도가 잘못되었습니다 *"<- OP에서 작동하는지 확실하지 않습니다. –

+0

예. 위의 문장을 이해하지 못하고 코드 구조와 어떻게 관련이 있는지 잘 모르겠습니다. –

+0

클래스를로드하기 전에 클래스를 사용하고 있습니다 ...하지만 모든 테스트 케이스에 해당되므로 똑같은 것...우리는 beforeclass를 테스트 스위트에 추가 할 수 있습니다. 그런 다음 캐시로드를 한 번만 수행 할 수 있습니다. – AutoMEta

6

모든 테스트 사례의 기본 클래스가 될 추상 클래스를 만들 수 있습니다. 캐시는이 클래스로 초기화되고 정적 멤버에 저장되어야합니다. 그런 다음 모든 테스트에서이 캐시를 사용해야합니다.

다른 해결책은 캐시를 관리 할 사용자 지정 테스트 러너를 구현하는 것입니다. 그런 다음 주석이있는 을 사용하여 캐시가 필요한 모든 테스트 케이스를 표시하고 테스트 러너 클래스를 전달해야합니다.

+0

답변이 내 것보다 낫습니다. +1을 사용하면 추상 부모 클래스를 제안 할 수 있습니다. –

+0

좋아 보인다. @RunWith를 어떻게 사용하는지 또는 예제를 참조 할 수 있는지 설명해주세요. – AutoMEta

+0

정적 멤버가 트릭을합니다. 감사합니다. – AutoMEta

1

캐시를 초기화하는 @BeforeClass 메소드를 포함하는 테스트 슈트를 생성하고 거기에 모든 테스트 케이스를 추가하십시오. 이후에 더 많은 테스트 클래스를 쉽게 추가 할 수 있습니다. 그 문제가있는 경우 올바른 순서로 넣어 두는 것을 잊지 마십시오. 톱 클래스가 먼저 실행됩니다.

@RunWith(Suite.class) 
@Suite.SuiteClasses({ 
TestClass1.class, 
TestClass2.class 
)} 
public class TestSuiteClass { 
    @BeforeClass 
    public void initCache() { 
     //Your init code here. 
    } 
} 

몇 가지 유용한 링크 : http://junit.sourceforge.net/javadoc/org/junit/runner/RunWith.html http://junit.org/javadoc/4.9/org/junit/runners/Suite.SuiteClasses.html

약간 더 포괄적 예 : http://www.tutorialspoint.com/junit/junit_suite_test.htm

+0

예. 시도합니다. 감사합니다. – AutoMEta

관련 문제