2014-10-24 5 views
1
나는의 TestCase를 재사용 할 필요가

작동하지 않습니다 JUnit을에 추가, 그래서 난 내 테스트 케이스에 개인 필드 "역할"을 만들었습니다수동의 TestCase를 인스턴스화하고

public class ATest extends TestCase { 

    private String role; 

    public void setRole(String userName) { 
     role = userName; 
    } 

    @Test 
    public void method1(){ 
     System.out.println("role:"+role); 
    } 

지금 내가 만들려면 같은 "ATEST"클래스를 사용하여 몇을 testcases과 스위트 :

public class AllTests { 
    public static Test suite() { 
     TestSuite suite = new TestSuite(AllTests.class.getName()); 

     //CASE 1: Works fine 
     suite.addTestSuite(ATest.class); 

     //CASE 2: Doesn't work fName is null 
     ATest aTest = new ATest(); 
     aTest.setRole("Admin"); 
     suite.addTest(aTest); 

     //CASE 3: works but ugly 
     ATest aTest2 = new ATest(); 
     aTest2.setName(aTest2.getClass().getMethods()[1].getName()); 
     aTest2.setRole("AnotherUser"); 
     suite.addTest(aTest2); 

     return suite; 
    } 
} 

케이스 (1)는 테스트 케이스를 추가 할 수있는 가장 확실한 방법이지만, 내 개인 필드를 설정하는 데 사용하지 않습니다. 사례 2는 내가하고 싶은 일이지만 내 테스트의 속성 인 fName이 null이기 때문에 작동하지 않습니다 (이클립스에서 디버그 퍼스펙티브를 사용하여 보았습니다). 마지막 사례 인 사례 3이 효과가있는 것 같지만이 방법을 사용하고 싶지 않습니다.

동일한 테스트 케이스를 재사용 할 수있는 더 우아하고 간단한 방법이 있습니까? 감사합니다.

답변

1

이 경우에는 스위트가 필요하지 않습니다. 당신은 매개 변수 테스트에 대한 자세한 내용은 JUnit wiki를 참조하십시오이

@RunWith(Parameterized.class) 
public class ATest { //with JUnit4, no need to extend from something 
    @Parameters 
    public static Collection<Object[]> data() { 
     return Arrays.asList(new Object[][] {  
       { "firstRole" }, { "SecondRole" }, { "ThirdRole" } 
      }); 
    } 

    private final String role; 

    public ATest(String role) { 
     this.role = role; 
    } 

    @Test 
    public void test() { 
     System.out.println("role:"+role); 
    } 
} 

에 대한 매개 변수화 된 클래스를 사용할 수 있습니다.