2013-02-03 29 views
2

我試圖修改下面的代碼,使用JUnit,使用TestNG。更改JUnitCore(JUnit)到TestNG

公共類AutotestShellRunner {

static Class<?> autotestClass; 
static org.junit.runner.Result junitResult; (I replaced that with org.testng.ITestResult) 

public static void main(final String[] args) { 
    int rc; 
    if (args.length != 2) { 
     System.err.println("Usage: AutotestShellRunnerDrive <TEST_SCENARIO_CLASS_NAME> <TEST_CASE>"); 
     System.exit(-1); 
    } 

    final String testsuite = args[0]; 
    final String testcase = args[1]; 

    try { 
     autotestClass = Class.forName(testsuite); 
    } catch (final ClassNotFoundException e) {t 
     e.printStackTrace(); 
     throw new RuntimeException("class" + testsuite + " is not found ", e); 
    } 
    junitResult = (new JUnitCore()).run(Request.method(autotestClass, testcase)); //Now from what i saw i can use instead of JUnitCore I use TestNG 

      The problem is that TestNG.run() is not recieving any arguments that I need to pass such as auttestClass and testcase 
      Does anyone have any idea? 

      Thanks, 
      Nir   

回答

2

使用TestNG的編程API,here is the documentation

+0

感謝它幫助,但它不會讓我跑在班裏唯一一個測試,而是它運行一切班內的考試。我將在以下代碼中添加代碼: – Nir

1

以下幫助,但仍然不能在類只運行一個特定的測試

import org.testng.ITestResult; 
import org.testng.TestListenerAdapter; 
import org.testng.TestNG; 
import java.util.Arrays; 
import java.util.List; 

/** 
* Created with IntelliJ IDEA. User: nir Date: 1/30/13 Time: 4:46 PM To change 
* this template use File | Settings | File Templates. 
*/ 
public class AutoTestNGShellRunner { 
    static Class<?> autotestClass; 



    public static void main(final String[] args) { 
     int rc; 
     if (args.length != 2) { 
      System.err 
        .println("Usage: AutoTestNGShellRunner <TEST_SCENARIO_CLASS_NAME> <TEST_CASE>"); 
      System.exit(-1); 
     } 

     final String testsuite = args[0]; 
     final String testcase = args[1]; 

     try { 
      autotestClass = Class.forName(testsuite); 

     } catch (final ClassNotFoundException e) { 
      e.printStackTrace(); 
      throw new RuntimeException("class" + testsuite + " is not found ", 
        e); 
     } 

     TestListenerAdapter tla = new TestListenerAdapter(); 
     TestNG testng = new TestNG(); 
     testng.setTestClasses(new Class[] { autotestClass }); 
     testng.setTestNames(Arrays.asList(testcase)); 
     testng.addListener(tla); 

     testng.run(); 
     tla.getPassedTests(); 
     List<ITestResult> failedTestsResults = tla.getFailedTests(); 
     List<ITestResult> successTestsResults = tla.getPassedTests(); 

     final int failureCount = failedTestsResults.size(); 

     if (failureCount == 0) { 
      System.out 
        .println(String.format("Test case %s passed", testcase)); 
      rc = 0; 
     } else { 
      System.out 
        .println(String.format("Test case %s failed", testcase)); 
      rc = -1; 
     } 

     System.exit(rc); 
    } 
} 
+0

它看起來像是當你傳遞類名時它會運行類中的所有TestNG方法,有什麼辦法可以避免它嗎? – Nir