如何从可执行jar中的main()运行TestNG测试?

我有一个可执行的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()可以访问测试类吗?

我在main()方法中使用了以下内容并且它有效。

  CommandLineOptions options = new CommandLineOptions(); JCommander jCommander = new JCommander(options, args); XmlSuite suite = new XmlSuite(); suite.setName("MyTestSuite"); suite.setParameters(options.convertToMap()); List classes = new ArrayList(); classes.add(new XmlClass("com.some.path.tests.MyTests")); XmlTest test = new XmlTest(suite); test.setName("MyTests"); test.setXmlClasses(classes); List suites = new ArrayList(); suites.add(suite); TestNG testNG = new TestNG(); testNG.setXmlSuites(suites); testNG.run(); 

您可以使用org.testng.xml.Parserorg.testng.xml.XmlSuite在main中加载常用的xml

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

如果那是你的文件夹结构,而不仅仅是一个类型,那就错了。 包名称表示为文件夹结构,而不是包含包名称的一个文件夹。

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

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