7

java.lang.NoClassDefFoundError仅在某些时候运行某些测试时出现错误

设置如下:测试是用 Scala 编写的,服务是用 Scala 和 Java 编写的。也使用蚂蚁和常春藤。

Order.scala看起来像这样:

  object Order extends JdbcEnabled {

  val orderServiceClientIpAddress = Network.localIpAddress
  val PersonalOffersSaleId = "123"
  lazy val checkoutClient = new CheckoutClientImpl(YamlConfigFactory.loadConfig(
    this.getClass.getClassLoader.getResourceAsStream("core_config.yaml")
  ).getRequiredSubConfig("core").getRequiredSubConfig(Environment.HostEnv))


  val storeList = new JLinkedList[Store]()
  storeList.add(OrderHelper.getSelectedStore)
  var skuList = OrderHelper.getAvailableSkus
  val skusForInternationalOrders = skuList


  def createOrder(){...}}

有许多使用 TestNG 运行的测试。有时所有的测试都没有问题地通过,但有时它们会因为这个异常而失败。

这是测试失败时如何调用 Order api 的片段。

val orderNumber = Order.createOrder()

这是测试失败时的整个堆栈跟踪:

java.lang.NoClassDefFoundError: Could not initialize class com.api.Order$
    at com.CreateOrder.setUpOnce(CreateOrder.scala:35)

该类中的第 35 行 CreateOrder.scala 是:

val orderNumber = Order.createOrder()
4

4 回答 4

4

这可能不是你的整个类路径,你必须在某处有丢失的类的名称(可能在'caused by..'之后)。也许可以将 TestNG 配置为向您显示完整的堆栈跟踪。

无论如何,初始化程序错误意味着“对象顺序”在其构造函数中抛出了异常,所以看看你在那里使用的是什么:也许 JDBC 类丢失了?还是您通过类加载器检索的配置文件?

于 2012-10-21T11:25:30.280 回答
4

通常,当您的单例对象中存在未捕获的异常时,就会发生此类问题。尝试在其中放置一个 try catch 子句以获取错误的根源。

于 2018-11-19T12:19:21.017 回答
1

我认为问题是这样的:

  lazy val checkoutClient = new CheckoutClientImpl(YamlConfigFactory.loadConfig(
    this.getClass.getClassLoader.getResourceAsStream("core_config.yaml")
  ).getRequiredSubConfig("core").getRequiredSubConfig(Environment.HostEnv))

正如他们所说的herehere,似乎是getClassLoader或类路径的问题。

于 2017-03-28T07:13:43.217 回答
0

您的 Order 课程似乎是一种代理。它没有被初始化。

于 2012-10-20T15:54:20.273 回答