【问题标题】:NoClassDefFoundError when run a simple extent report configuration TestNG运行简单范围报告配置 TestNG 时出现 NoClassDefFoundError
【发布时间】:2021-09-26 11:21:42
【问题描述】:

我试图了解 ExtentReports 的工作原理并编写了 2 个简单的类,其中我正在初始化范围报告变量和我正在使用的测试类,请参阅以下类

package TestProperty;
import org.testng.annotations.BeforeClass;
import com.aventstack.extentreports.ExtentReports;
import com.aventstack.extentreports.reporter.ExtentSparkReporter;
public class CheckReport {
    ExtentSparkReporter spark = new ExtentSparkReporter("C:\\Users\\jq2870\\eclipse-workspace\\TestJava Project\\Reports\\extentreports.html");
    protected ExtentReports extent = new ExtentReports();

    @BeforeClass
    public void setUp() {
        extent.attachReporter(spark);
    }
}

我使用报告变量的类是

import org.testng.annotations.Test;
import com.aventstack.extentreports.ExtentTest;
import TestProperty.CheckReport;


public class NewTest extends CheckReport{
    ExtentTest test = extent.createTest("CreateUser");
    @Test
    public void f() {
        test.info("This is a test class");

    }

}

我正在尝试通过右键单击该类并在 Eclipse 中运行和 testNG 测试来运行它,但遇到了这个问题

[RemoteTestNG] detected TestNG version 7.2.0
org.testng.TestNGException: 
Cannot instantiate class NewTest
    at org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:30)
    at org.testng.internal.InstanceCreator.instantiateUsingDefaultConstructor(InstanceCreator.java:193)
    at org.testng.internal.InstanceCreator.createInstanceUsingObjectFactory(InstanceCreator.java:113)
    at org.testng.internal.InstanceCreator.createInstance(InstanceCreator.java:79)
    at org.testng.internal.ClassImpl.getDefaultInstance(ClassImpl.java:109)
    at org.testng.internal.ClassImpl.getInstances(ClassImpl.java:167)
    at org.testng.TestClass.getInstances(TestClass.java:102)
    at org.testng.TestClass.initTestClassesAndInstances(TestClass.java:82)
    at org.testng.TestClass.init(TestClass.java:74)
    at org.testng.TestClass.<init>(TestClass.java:39)
    at org.testng.TestRunner.initMethods(TestRunner.java:460)
    at org.testng.TestRunner.init(TestRunner.java:339)
    at org.testng.TestRunner.init(TestRunner.java:292)
    at org.testng.TestRunner.<init>(TestRunner.java:223)
    at org.testng.remote.support.RemoteTestNG6_12$1.newTestRunner(RemoteTestNG6_12.java:33)
    at org.testng.remote.support.RemoteTestNG6_12$DelegatingTestRunnerFactory.newTestRunner(RemoteTestNG6_12.java:66)
    at org.testng.ITestRunnerFactory.newTestRunner(ITestRunnerFactory.java:55)
    at org.testng.SuiteRunner$ProxyTestRunnerFactory.newTestRunner(SuiteRunner.java:676)
    at org.testng.SuiteRunner.init(SuiteRunner.java:178)
    at org.testng.SuiteRunner.<init>(SuiteRunner.java:112)
    at org.testng.TestNG.createSuiteRunner(TestNG.java:1302)
    at org.testng.TestNG.createSuiteRunners(TestNG.java:1278)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1127)
    at org.testng.TestNG.runSuites(TestNG.java:1066)
    at org.testng.TestNG.run(TestNG.java:1034)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)
Caused by: java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
    at org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:23)
    ... 27 more
Caused by: java.lang.NoClassDefFoundError: freemarker/template/TemplateModelException
    at TestProperty.CheckReport.<init>(CheckReport.java:9)
    at NewTest.<init>(NewTest.java:6)
    ... 33 more
Caused by: java.lang.ClassNotFoundException: freemarker.template.TemplateModelException
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    ... 35 more

谁能告诉我为什么会出现这个错误?

【问题讨论】:

  • 如果您的 ExtentReports 版本低于 5,请检查相关的 freemarker 版本(和其他依赖项)
  • @abhinav 这是NewTestCheckReport 中的完整代码吗?
  • @GauthamM 是的,这是我粘贴的完整课程。
  • @user7294900 extent 报告版本是 5.0.1,我使用的 freemarker 版本是 2.3.31
  • @AbhinavKumarMall 我要求确认是否有任何参数化构造函数。例外似乎就是这样

标签: java testng extentreports


【解决方案1】:

ExtentReports 还包括您需要在类路径中拥有的 FreeMarker jar

<dependency>
      <groupId>org.freemarker</groupId>
      <artifactId>freemarker</artifactId>
      <version>2.3.30</version>
</dependency>

【讨论】:

  • 添加了 JAR 但仍然遇到问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-09
  • 1970-01-01
  • 1970-01-01
  • 2018-06-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多