2013-07-05 7 views
0

그래서 다른 웹 사이트의 특정 속성을 평가하는 테스트를 실행하려고합니다. 실제 평가는 유료 호출 (pay-per-call) 리소스에 의해 처리되므로 리소스를 생성하는 횟수를 최소화하고 싶습니다. 또한 JUnit을 사용하여 더 큰 자동 테스트 스위트에 적합하도록해야합니다.JUnit에서 매개 변수별로 클래스를 한 번 인스턴스화하십시오.

지금까지 매개 변수화 된 테스트를 통해이 작업을 수행해 왔지만 각 테스트 메서드에 대해 새 인스턴스를 인스턴스화한다는 사실을 알게되었습니다.

이제 리소스를 테스트 클래스의 생성자로 공급되는 각 매개 변수에 대해 한 번만 만들 수있는 방법을 찾으려고합니다. @BeforeClass는 한 번만 수행하고 @Before는 각 테스트 전에 한 번 수행합니다.

내가 찾은 모든 도움말 항목은 모든 테스트에서 값 비싼 리소스를 한 번 만들었지 만,이 경우에는 새로운 매개 변수 집합마다 리소스를 다시 만들어야합니다.

Constructing resource for url1 
test1 
test2 
Constructing resource for url2 
test1 
test2 

모든 아이디어/솔루션 :

@RunWith(Parameterized.class) 
public class MyTestClass { 

    private static Resource expensiveToCreateResource; 

    public MyTestClass(String url) { 
     System.out.println("Constructing resource for " + url); 
     expensiveToCreateResource = new Resource(url); //This is getting created 4x, which is wrong 
    } 

    @Parameters 
    public static Collection<Object[]> data() { 
     return Arrays.asList(new Object[][] {{"url1"},{"url2"}}); 
    } 

    @Test 
    public test1() { 
     expensiveToCreateResource.method1(); 
     System.out.println("test1"); 
    } 

    @Test 
    public test2() { 
     expensiveToCreateResource.method2(); 
     System.out.println("test2"); 
    } 
} 

가 출력을 생성합니다 :

는 더 나은 내가 무엇을 찾고 보여주기 위해 다음과 같은 몇 가지 예제 코드/출력을 작성했습니다? 감사.

답변

1

매개 변수 당 클래스를 한 번 인스턴스화하려면 고유 한 JUnit 테스트 러너를 작성해야합니다. 대신 필자는 필요에 따라 정보를 캐시하려고합니다. URL을 리소스에 매핑하는 정적지도

관련 문제