如何在一个可执行的JAR运行从主()TestNG进行?(How to run TestNG test

2019-09-02 09:46发布

我有一个包含所有依赖的测试类可执行的JAR。 我已经证实,当我执行罐子main()方法被调用。 我试图将代码添加到main()中,这样我可以运行特定TestNG的测试类。 从TestNG.org的文件,这似乎是做到这一点的方式:

    TestListenerAdapter tla = new TestListenerAdapter();
    TestNG testng = new TestNG();
    testng.setTestClasses(new Class[] { com.some.path.tests.MyTests.class });
    testng.addListener(tla);
    testng.run();

我的文件夹结构是典型的:

    /src/main/java/Main.java
    /src/test/java/com/some/path/tests/MyTests.java

然而,当我尝试编译它,我得到这个错误:

    java: /src/main/java/Main.java:46: package com.some.path.tests does not exist

有反正我可以改变我的项目,以便testng.setTestClasses()在main()可以访问测试类?

Answer 1:

我用下面的在我的main()方法和它的工作。

    CommandLineOptions options = new CommandLineOptions();
    JCommander jCommander = new JCommander(options, args);

    XmlSuite suite = new XmlSuite();
    suite.setName("MyTestSuite");
    suite.setParameters(options.convertToMap());

    List<XmlClass> classes = new ArrayList<XmlClass>();
    classes.add(new XmlClass("com.some.path.tests.MyTests"));

    XmlTest test = new XmlTest(suite);
    test.setName("MyTests");
    test.setXmlClasses(classes);

    List<XmlSuite> suites = new ArrayList<XmlSuite>();
    suites.add(suite);

    TestNG testNG = new TestNG();
    testNG.setXmlSuites(suites);
    testNG.run();


Answer 2:

您可以使用主加载很普通的XML org.testng.xml.Parserorg.testng.xml.XmlSuite

String xmlFileName = "testng.xml";
List<XmlSuite> suite;
try
{
    suite = (List <XmlSuite>)(new Parser(xmlFileName).parse());
    testng.setXmlSuites(suite);
    testng.run();
}
catch (ParserConfigurationException e)
{
    e.printStackTrace();
}
catch (SAXException e)
{
    e.printStackTrace();
}
catch (IOException e)
{
    e.printStackTrace();
}


Answer 3:

如果这是你的文件夹结构,而不仅仅是一个类型,它是错的。 包名称被表示为一个文件夹结构,具有包名称而不是一个文件夹。

所以它应该是src/test/java/com/some/path/tests/MyTests.java

此外,请确保您的测试类实际上是在JAR文件。 如果你使用Maven构建的Jar,你的测试类不会被默认包含。



文章来源: How to run TestNG tests from main() in an executable jar?