5

我有一个包含所有依赖项和测试类的可执行 JAR。我已经确认在执行 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

无论如何我可以改变我的项目,以便 main() 中的 testng.setTestClasses() 可以访问测试类吗?

4

3 回答 3

8

我在我的 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();
于 2013-06-02T03:05:50.453 回答
7

您可以使用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();
}
于 2015-03-18T22:57:55.790 回答
1

如果那是您的文件夹结构,而不仅仅是一种类型,那就错了。包名表示为一种文件夹结构,而不是一个具有包名的文件夹。

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

此外,请确保您的测试类实际上在 Jar 文件中。如果您使用 maven 构建 Jar,则默认情况下不会包含您的测试类。

于 2013-05-09T15:44:05.590 回答