2012-04-30 2 views
0

방금 ​​TestNG 팩토리를 중첩 할 수 있다는 것을 알게되었습니다. 예! 그러나 나는 모든 테스트 이름이 같은 것을 좋아하지 않는다.TestNG, 공장 및 매개 변수화 된 테스트 설명

testng.xml :

<suite> 
    <test name="TNGTST" > 
     <classes> 
      <class name="FactoryLevel1" /> 
     </classes> 
    </test> 
</suite> 

FactoryLeve1.java :

import org.testng.annotations.Factory; 
public class FactoryLevel1 { 
    @Factory 
    public Object[] createTest() { 
     Object[] res = new Object[3]; 
     for (int i = 1; i <= 3; i++) 
      res[i - 1] = new FactoryLevel2(i); 
     return res; 
    } 
} 

FactoryLeve2.java :

import org.testng.annotations.Factory; 
public class FactoryLevel2 { 
    int inst; 
    public FactoryLevel2(int inst) { 
     this.inst = inst; 
    } 
    @Factory 
    public Object[] createTest() { 
     Object[] res = new Object[10]; 
     for (int i = 1; i <= 10; i++) 
      res[i - 1] = new TestClass(i * inst); 
     return res; 
    } 
} 

TestObj.java :

import org.testng.annotations.Test; 
public class TestObj { 
    int inst; 
    public TestObj(int inst) { 
     this.inst = inst; 
    } 
    @Test 
    public void printMethod() { 
     System.out.println("Instance: " + inst); 
    } 
} 
이 내 예입니다

내 문제는 Intellij IDEA는 이름이 TNGTST [printMethod()] 인 모든 테스트를 보여 주며 젠킨스가 모든 테스트에서 비슷한 것을 보여줄 것이라고 추측합니다 (이 도구가 어떻게 작동하는지 모르겠습니다). 비 정적 방법에서 테스트 용으로 내 자신의 이름을 어떻게 든 만들 수 있습니까?

답변

1

시험 클래스를 org.testng.ITest으로 구현하고 getName()을 재정 의하여 원하는 것을 반환하십시오. 저는 IDEA가 이것을 존중한다고 생각합니다 (100 % 확실하지는 않습니다.).

0

세드릭 베스트의 해결책이 올바른 것입니다 (org.testng.ITest 구현). 하지만

방법이라고합니다 getTestName :

@Override 
public String getTestName() { 
    return "custom_" + i++; 
} 

IDEA (14 명) 명예 그것을 :

TstNG with description and IDEA 14

관련 문제