运行 在没有插件的情况下使用 maven 在 Eclipse 中以编程方式测试 NG

Run testNG programatically in Eclipse using maven without a plugin

我想 运行 TestNG 而不是在普通的 maven 快速启动项目中使用 "TestNG eclipse plugin"。

无论我从 http://testng.org/doc/documentation-main.html#running-testng-programmatically 和其他来源读到什么,我都想到了使用 classes 作为:

MessageUtil.java

package com.mytests.testng;

public class MessageUtil {
   private String message;

   public MessageUtil(String message){
      this.message = message;
   }

   public String printMessage(){
      System.out.println(message);
      return message;
   }   
}

TestNGExample.java

package com.mytests.testng;

import org.testng.Assert;
import org.testng.annotations.Test;

public class TestNGExample {
   String message = "Hello World";  
   MessageUtil messageUtil = new MessageUtil(message);

   @Test
   public void testPrintMessage() {   
      Assert.assertEquals(message,messageUtil.printMessage());
   }
}

App.java

package com.mytests.testng;

import org.testng.TestListenerAdapter;
import org.testng.TestNG;

public class App
{
    public static void main( String[] args )
    {
        System.out.println( "Hello World!" );
        TestListenerAdapter tla = new TestListenerAdapter();
        TestNG testNG = new TestNG();

        @SuppressWarnings("rawtypes")
        Class[] testClasses = new Class[]{
                TestNGExample.class
        };

        testNG.setTestClasses(testClasses);
        testNG.addListener(tla);
        testNG.run();
    }
}

但是我在这里遇到例外情况:

例外框 1

异常框 2

控制台异常

Exception in thread "main" java.lang.NoClassDefFoundError: org/testng/ITestListener
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
    at java.lang.Class.privateGetMethodRecursive(Unknown Source)
    at java.lang.Class.getMethod0(Unknown Source)
    at java.lang.Class.getMethod(Unknown Source)
    at sun.launcher.LauncherHelper.validateMainClass(Unknown Source)
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.testng.ITestListener
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 7 more

即使我没有收到任何编译时错误,我也不明白为什么会出现问题。 TestNG 依赖已成功下载并有助于编写代码。但是我猜 class 不会在 运行 时间加载。可以做什么?

如果不使用任何 XML 导致错误,我也可以使用它,但不能使用 TestNG 的 eclipse 插件。

P.S.: 我是 TestNG 的新手,这是我的第一个程序

发生此问题是因为在运行时,testng jar 在类路径中不可用。您可以通过在 testng pom 依赖项中使用 <scope>compile</scope> 而不是 <scope>test</scope> 来解决此问题。