在测试结果中获取随机NoClassDefFoundError

时间:2015-02-18 15:51:48

标签: java noclassdeffounderror

我每天使用Maven在Jenkins上运行TestNG测试。我很少(似乎也是随机的)得到一个NoClassDefFoundError。如果我重新运行测试,它通常会正常通过。当我将ClassName.class作为参数传递给方法时,似乎正在发生这种情况。

它被抛出用于不同的类,但总是在调用此方法时:

// page object for selenium
// line 166 in stack trace below
Page.getObject(webDriver, PageClass.class);

所以在这种情况下,错误将是:

java.lang.NoClassDefFoundError: path/to/PageClass

但正如我所说,PageClass可能有所不同。

完整堆栈跟踪:

java.lang.NoClassDefFoundError: path/to/PageClass
path.to.DifferentPageClass.someMethod(DifferentPageClass.java:166)
path.to.LibClass.someMethod(LibClass.java:132)
path.to.SuiteClass.testMethod(SuiteClass.java:332)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:606)
org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85)
org.testng.internal.MethodInvocationHelper$1.runTestMethod(MethodInvocationHelper.java:200)
com.bigweb.weather.test.utility.BaseTest.run(BaseTest.java:88)
org.testng.internal.MethodInvocationHelper.invokeHookable(MethodInvocationHelper.java:212)
org.testng.internal.Invoker.invokeMethod(Invoker.java:689)
org.testng.internal.Invoker.retryFailed(Invoker.java:1027)
org.testng.internal.TestMethodWithDataProviderMethodWorker.call(TestMethodWithDataProviderMethodWorker.java:95)
org.testng.internal.TestMethodWithDataProviderMethodWorker.call(TestMethodWithDataProviderMethodWorker.java:14)
java.util.concurrent.FutureTask.run(FutureTask.java:262)
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
java.util.concurrent.FutureTask.run(FutureTask.java:262)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)

如何找到这个的根本原因?

1 个答案:

答案 0 :(得分:0)

之前我有类似的东西,因为测试破了,所有其他测试都受到了损害而且没有用。

我不太了解你的环境。所以,我会尝试一些步骤:

  • 查看您的万无一失的报告,了解第一次测试中断/失败的原因并进行处理。
  • 确保所有测试都在执行。 (Maven有一个约定,所有测试类都需要用“Test”这个词来完成你的名字。(例如MyClassTest))
  • 查看班级的依赖范围。它必须是“编译”或至少“测试”。如果未指定,请指定它。你不可能每次都信任Maven。
  • 确保您的jenkins环境可以下载依赖项。 (如果你有代理人)