尝试从主方法运行TestNG时,无法在类路径中找到类

dsi*_*ler 3 java testng maven

我使用Maven运行Selenium Testng测试,但是我试图创建可执行jar,因此其他团队成员只需简单的设置即可从其桌面运行自动化套件。

因此,我添加了一个主要的“运行器”方法来创建可执行jar。

public class LaunchTests {

public static void main(String[] args) {
    TestListenerAdapter tla = new TestListenerAdapter();
    TestNG testng = new TestNG();
    List<String> suites = new ArrayList();
    suites.add("testng.xml");//path to xml..
    testng.setTestSuites(suites);
    testng.run();

}
Run Code Online (Sandbox Code Playgroud)

}

我最好的猜测是需要向POM.xml中添加一些内容吗?

从eclipse手动运行testng测试或使用mvn clean测试(Surefire插件)运行它们时,它们可以完美运行。但是当尝试以Java程序运行时出现此错误。

    Exception in thread "main" org.testng.TestNGException: 
Cannot find class in classpath: package.TestOne
    at org.testng.xml.XmlClass.loadClass(XmlClass.java:81)
    at org.testng.xml.XmlClass.init(XmlClass.java:73)
    at org.testng.xml.XmlClass.<init>(XmlClass.java:59)
    at org.testng.xml.TestNGContentHandler.startElement(TestNGContentHandler.java:548)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.emptyElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(Unknown Source)
    at javax.xml.parsers.SAXParser.parse(Unknown Source)
    at org.testng.xml.XMLParser.parse(XMLParser.java:38)
    at org.testng.xml.SuiteXmlParser.parse(SuiteXmlParser.java:16)
    at org.testng.xml.SuiteXmlParser.parse(SuiteXmlParser.java:9)
    at org.testng.xml.Parser.parse(Parser.java:172)
    at org.testng.TestNG.initializeSuitesAndJarFile(TestNG.java:302)
    at org.testng.TestNG.run(TestNG.java:991)
    at util.LaunchTests.main(LaunchTests.java:17)
Run Code Online (Sandbox Code Playgroud)

Testng.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite1" parallel="methods" thread-count="1">

    <test name="Chrome Adviser Portal" allow-return-values="true"
        thread-count="1">
        <parameters>
            <parameter name="browser" value="chrome" />
            <parameter name="loginType" value="adviser" />
        </parameters>
        <classes>
            <class name="adviserPortal.AdviserLogin" />
        </classes>
    </test>
</suite>
Run Code Online (Sandbox Code Playgroud)

Kri*_*van 6

您提到可以通过maven surefire插件从eclipse中运行测试,并且仅在执行main方法时不能运行它。

仅当您的类LaunchTests驻留在src/main/java并且套件xml文件testng.xml引用中的类时,才会发生这种情况src/test/java。内的Java类src/main/java无法查看位于中的Java类src/test/java。这就解释了为什么TestNG抛出异常Cannot find class in classpath

而且,如果默认情况下LaunchTests进入该程序,src/test/java则它将不会包含在您正在构建的uber jar(可执行jar)中,因为省略了测试类。

因此,如果您确实希望能够做到这一点,则有两种选择

  1. 从把你所有的测试类src/test/javasrc/main/java,然后工作,它(Surefire插件在你的POM文件可能需要一些调整,让它知道你的测试源不配置src/test/java,但src/main/java
  2. 您可以maven jar plugin通过参考here来使用类似于创建一罐测试类的东西