首页 文章

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

提问于
浏览
4

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

3 回答

  • 7

    我在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();
    
  • 1

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

    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();
    }
    
  • 6

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

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

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

相关问题