2012-06-21 4 views

답변

0

testng.xml에서 그것을 구성 할

@Test(dataProvider = "dataFileProvider", dataProviderClass = TestDataProvider.class) 

같은 @ 테스트 - 주석을 원하지 않는다: Workaraound 1 : Workaraound 2

를 필요한 경우 StaticProvider

당신은 쉽게 고정 공급자를 변경할 수 있습니다 (210)

는 ... 그 시도 없지만 수동으로

씨 Beust의 대답을 기대 찾고 XML- 데이터를 잡아 경우에도 작동합니다 마십시오)

0

짧은 대답은 : 아니, 당신이 할 수있는 testng.xml에서 코드에 특수 효과를 추가하지 마십시오.

Frank가 설명하는 것처럼 Annotation Transformer로 기존 주석을 수정할 수 있습니다.

0

때로는 뭔가를하고 싶지만 메모리 누출 문제를 해결하기 위해 개인 변수에 액세스하는 것과 같이 할 수없는 경우가 있습니다. 당신이 재미있을 수 없다는 사실에도 불구하고 이런 일을하는 법을 알아내는 것. 필자가 정말로 원한다면, TestNG 객체를 사용하고 testng.xml 파일 로딩을 실행하기 전에 패키지를 실행하려고하는 것이 좋습니다.

개인적으로 필자는 'mvn test'를 사용하고 싶습니다. 불행히도 testng xml 파일에서 실행하기 위해 pom.xml 코드를 추가하면 testng.xml 파일을 제공해야하므로 'mvn test'가 작동하지 않습니다. 항상 프로그래머의 95 %가 작품을 사용하고 오버라이드를 허용하는지 확인하십시오.

그래서 나는 직접 testng.xml 파일을 확장하고 testng.xml 파일을 읽고 주석 변압기 클래스를 사용하여 주석을 구성 할 수있는 코드를 작성하는 것이 좋습니다. 당신이 Demo.class를 실행하려면

public class TestNGSuite { 
public static void main(String[] args) { 
    System.out.println("main start"); 
    try { 
     new TestNGSuite(new Class[]{ Demo.class }); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    System.out.println("main finish"); 
} 

public TestNGSuite(Class[] classes) throws Exception { 
    // Create Suite List 
    List<XmlSuite> suites = new ArrayList<XmlSuite>(); 

    // Add Suite to Suite List 
    XmlSuite suite = new XmlSuite(); 
    suites.add(suite); 
    suite.setName("MyTestSuite"); 

    // Add Test to Suite 
    XmlTest test = new XmlTest(suite); 
    test.setName("MyTest"); 

    // Add Class List to Test 
    List<XmlClass> xmlClasses = new ArrayList<XmlClass>(); 
    test.setXmlClasses(xmlClasses); 

    // Add Class to Class List 
    for(Class clazz: classes) { 
     XmlClass xmlClass = new XmlClass(clazz); 
     xmlClasses.add(xmlClass); 
    } 

    // Run TestNG 
    TestNG testNG = new TestNG(); 
    testNG.setXmlSuites(suites); 
    testNG.addListener(new TestNGAnnotationTransformer(methodName)); 
    testNG.addListener(new TestNGSuiteConsoleLogger()); 
    testNG.run(); 

    if(testNG.hasFailure()) { // Throw an exception to make mvn goal fail 
     throw new Exception("Failed Tests"); 
    } 
} 

public static class TestNGSuiteConsoleLogger extends TestListenerAdapter{ 
     @Override 
     public void onTestFailure(ITestResult tr) { 
     Console.log(TestNGSuiteConsoleLogger.class, "FAILURE:"+tr.getMethod()); 
     tr.getThrowable().printStackTrace(); 
     } 
} 

public static class TestNGAnnotationTransformer implements IAnnotationTransformer{ 
     String methodToRun; 
     public TestNGAnnotationTransformer(String methodName) { 
       methodToRun = methodName; 
     } 
    public void transform(ITestAnnotation annotation, Class arg1, 
      Constructor arg2, Method testMethod) { 
      if (methodToRun.equals(testMethod.getName())) { 
      annotation.setEnabled(true); 
      } 
     } 
} 
} 

의 TestNG를 주석 "@Test"에이 방법이 있는지 확인 : 여기

당신이 시작하는 몇 가지 코드입니다.