2013-08-30 4 views
0

동일한 입력 데이터 파일을 모두 읽는 junit 테스트 클래스 세트를 만들고 있습니다. 아래 테스트 스위트를 만들었지 만, 각 테스트 클래스의 파일 이름여러 junit4 테스트 클래스에서 공통 리소스 이름을 초기화하는 방법

그래서, 난 .. 코드를 반복하지 않고이 작업을 수행 할

@RunWith(Suite.class) 
@SuiteClasses({SomeTests.class,someOtherTests.class}) 
public class AllTests{ 

} 
------------------- 
public class SomeTests{ 
    private String[] allfiles; 

    public SomeTests() { 
     allfiles = new String[] {"data1.txt","data2.txt"}; 
    } 

    @Test 
    public void testXX1(){ 
     // 
    } 

    @Test 
    public void testXX2(){ 
     // 
    } 

} 

public class someOtherTests{ 
    private String[] allfiles; 

    public someOtherTests() { 
     allfiles = new String[] {"data1.txt","data2.txt"}; 
    } 

    @Test 
    public void testYY(){ 
     // 
    } 

} 

나는 내가 초기화 할 수있는 테스트 클래스 array..sothat 문자열로 파일 이름을 제공하는 다른 클래스를 만들어야 할 것이라고 생각하는 방법 BeforeClass 주석

public class FileNames { 
    public static String[] getFileNames() { 
     return new String[]{"data1.txt","data2.txt"}; 
    } 
} 

public class SomeTests{ 
    private String[] allfiles; 

    public SomeTests() { 

    } 

    @BeforeClass 
    public void setUp(){ 
     allfiles = FileNames.getFileNames(); 
    } 

    @Test 
    public void testXX1(){ 
     // 
    } 

    @Test 
    public void testXX2(){ 
     // 
    } 

} 

와이이 결합하지만 그 올바른 방법입니다 확실하지 오전의 getFileNames() 정적 메서드를 호출하여 allfiles 변수입니다. 이것은 setUp()이 static으로 선언 될 것을 요구하며, 이는 인스턴스 변수 allfiles를 정적으로 만들어야 함을 의미합니다!

나는 이것이 junit testing의 일반적인 시나리오라고 생각한다. 누군가 올바르게이 작업을 수행하는 방법을 알려 줄 수 있는가?

+0

아니요, setUp()은 정적으로 선언 할 필요가 없습니다. 멤버 메서드가 정적 메서드를 호출하는 데는 아무런 문제가 없습니다. 당신이 한 일은 괜찮습니다. 하지만 테스트 도중 내용을 변경하지 않는 한'allFiles' var을 가지고 있어도 신경 쓰지 않을 것입니다 (있을 법하지 않음). 대신 필요할 때마다 정적'getFileNames()'를 호출하면됩니다. – sbk

+0

나는 테스트 스위트'의 java.lang.Exception가 실행이 오류 가지고 : 방법 설정은() org.junit.runners.model.FrameworkMethod.validatePublicVoid에서 \t (FrameworkMethod.java:84) 정적한다 \t을 ...' – damon

답변

0

@BeforeClass 대신 @Before을 사용하면 setUp() 방법을 정적 일 필요가 없습니다. 당신이 당신의 시험에 파일 이름 배열을 수정하려고하지 않는

그러나, 당신은 또한 그 이름으로 보호 된 상수를 당신의 검사 결과에 대한 기본 클래스를 작성하고 선언 할 수 :

public class FileBasedTests { 
    protected static final String[] FILENAMES = {"data1.txt","data2.txt"} 
} 

public class SomeTests extends FileBasedTests { 
    ... 
} 

당신이 정말로 우려되는 경우 각 테스트에 대해 해당 파일 이름의 사본이있는 경우 allFiles = FILENAMES.clone()을 작성할 수 있습니다.

관련 문제