无法运行单元测试... java.lang.ExceptionInInitializerError

2020-09-03 11:36发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好,

我在执行自己的单元测试方法时遇到一些问题...我认为问题在于创建ProductModel,但是我不确定...

错误消息:

  java.lang.ExceptionInInitializerError
      在de.hybris.platform.servicelayer.model.DefaultNewModelContextFactory.getTenantId(DefaultNewModelContextFactory.java:48)
      在de.hybris.platform.servicelayer.model.DefaultNewModelContextFactory.createNewBuilder(DefaultNewModelContextFactory.java:39)
      在de.hybris.platform.servicelayer.model.DefaultNewModelContextFactory.createNew(DefaultNewModelContextFactory.java:30)
      在de.hybris.platform.servicelayer.model.AbstractItemModel。(AbstractItemModel.java:65)
      在de.hybris.platform.core.model.ItemModel。(ItemModel.java:76)
      在de.hybris.platform.core.model.product.ProductModel。(ProductModel.java:675)
      在com.unic.hybris.interdiscount.b2b.facades.impl.DefaultIDB2BProductFacadeTest.testGetProduct(DefaultIDB2BProductFacadeTest.java:72)
      在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
      在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      在org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:44)
      在org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
      在org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
      在org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
      在org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
      在org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
      在org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:69)
      在org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:48)
      在org.junit.runners.ParentRunner $ 3.run(ParentRunner.java:231)
      在org.junit.runners.ParentRunner上$ 1.schedule(ParentRunner.java:60)
      在org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
      在org.junit.runners.ParentRunner.access处$ 000(ParentRunner.java:50)
      在org.junit.runners.ParentRunner上$ 2.evaluate(ParentRunner.java:222)
      在org.junit.runners.ParentRunner.run(ParentRunner.java:292)
      在org.junit.runners.Suite.runChild(Suite.java:128)
      在org.junit.runners.Suite.runChild(Suite.java:24)
      在org.junit.runners.ParentRunner $ 3.run(ParentRunner.java:231)
      在org.junit.runners.ParentRunner上$ 1.schedule(ParentRunner.java:60)
      在org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
      在org.junit.runners.ParentRunner.access处$ 000(ParentRunner.java:50)
      在org.junit.runners.ParentRunner上$ 2.evaluate(ParentRunner.java:222)
      在org.junit.runners.ParentRunner.run(ParentRunner.java:292)
      在org.junit.runner.JUnitCore.run(JUnitCore.java:157)
      在com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:74)
      在com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:211)
      在com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:67)
      在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
      在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      在com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
  引起原因:de.hybris.bootstrap.config.BootstrapConfigException:无法确定platformhome
      在de.hybris.bootstrap.config.ConfigUtil.getPlatformHome(ConfigUtil.java:136)
      在de.hybris.bootstrap.config.ConfigUtil.getPlatformConfig(ConfigUtil.java:354)
      在de.hybris.bootstrap.config.ConfigUtil.loadLog4JProperties(ConfigUtil.java:369)
      在de.hybris.platform.core.Log4JUtils.readConfig(Log4JUtils.java:105)
      在de.hybris.platform.core.Log4JUtils.startup(Log4JUtils.java:59)
      在de.hybris.platform.core.Registry。(Registry.java:67)
      ...更多42
  原因:de.hybris.bootstrap.config.BootstrapConfigException:无法确定core-items.xml的路径
      在de.hybris.bootstrap.config.ConfigUtil.getPlatformHome(ConfigUtil.java:85)
      ...更多47
 
 
  java.lang.ExceptionInInitializerError
      在sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)处
      在sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
      在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
      在java.lang.reflect.Constructor.newInstance(Constructor.java:526)
      在org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:31)
      在org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:24)
      在org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
      在org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
      在org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
      在org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:98)
      在org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:84)
      在com.intellij.junit4.JUnit46ClassesRequestBuilder.collectWrappedRunners(JUnit46ClassesRequestBuilder.java:90)
      在com.intellij.junit4.JUnit46ClassesRequestBuilder.getClassesRequest(JUnit46ClassesRequestBuilder.java:51)
      在com.intellij.junit4.JUnit4TestRunnerUtil.buildRequest(JUnit4TestRunnerUtil.java:91)
      在com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:39)
      在com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:211)
      在com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:67)
      在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
      在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      在com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
  引起原因:de.hybris.bootstrap.config.BootstrapConfigException:无法确定platformhome
      在de.hybris.bootstrap.config.ConfigUtil.getPlatformHome(ConfigUtil.java:136)
      在de.hybris.bootstrap.config.ConfigUtil.getPlatformConfig(ConfigUtil.java:354)
      在de.hybris.bootstrap.config.ConfigUtil.loadLog4JProperties(ConfigUtil.java:369)
      在de.hybris.platform.core.Log4JUtils.readConfig(Log4JUtils.java:105)
      在de.hybris.platform.core.Log4JUtils.startup(Log4JUtils.java:59)
      在de.hybris.platform.testframework.HybrisJUnit4ClassRunner。(HybrisJUnit4ClassRunner.java:54)
      ...另外22个
  原因:de.hybris.bootstrap.config.BootstrapConfigException:无法确定core-items.xml的路径
      在de.hybris.bootstrap.config.ConfigUtil.getPlatformHome(ConfigUtil.java:85)
      ...另外27个


  

我的代码:

  @Test
  公共无效testGetProduct()引发异常{


      最终的ProductModel productModel = new ProductModel();
      productModel.setCode(" TEST_CODE");

      assert(true);
  }

  

我错过了一些配置吗?

非常感谢!

格里兹

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好,

我在执行自己的单元测试方法时遇到一些问题...我认为问题在于创建ProductModel,但是我不确定...

错误消息:

  java.lang.ExceptionInInitializerError
      在de.hybris.platform.servicelayer.model.DefaultNewModelContextFactory.getTenantId(DefaultNewModelContextFactory.java:48)
      在de.hybris.platform.servicelayer.model.DefaultNewModelContextFactory.createNewBuilder(DefaultNewModelContextFactory.java:39)
      在de.hybris.platform.servicelayer.model.DefaultNewModelContextFactory.createNew(DefaultNewModelContextFactory.java:30)
      在de.hybris.platform.servicelayer.model.AbstractItemModel。(AbstractItemModel.java:65)
      在de.hybris.platform.core.model.ItemModel。(ItemModel.java:76)
      在de.hybris.platform.core.model.product.ProductModel。(ProductModel.java:675)
      在com.unic.hybris.interdiscount.b2b.facades.impl.DefaultIDB2BProductFacadeTest.testGetProduct(DefaultIDB2BProductFacadeTest.java:72)
      在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
      在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      在org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:44)
      在org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
      在org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
      在org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
      在org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
      在org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
      在org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:69)
      在org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:48)
      在org.junit.runners.ParentRunner $ 3.run(ParentRunner.java:231)
      在org.junit.runners.ParentRunner上$ 1.schedule(ParentRunner.java:60)
      在org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
      在org.junit.runners.ParentRunner.access处$ 000(ParentRunner.java:50)
      在org.junit.runners.ParentRunner上$ 2.evaluate(ParentRunner.java:222)
      在org.junit.runners.ParentRunner.run(ParentRunner.java:292)
      在org.junit.runners.Suite.runChild(Suite.java:128)
      在org.junit.runners.Suite.runChild(Suite.java:24)
      在org.junit.runners.ParentRunner $ 3.run(ParentRunner.java:231)
      在org.junit.runners.ParentRunner上$ 1.schedule(ParentRunner.java:60)
      在org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
      在org.junit.runners.ParentRunner.access处$ 000(ParentRunner.java:50)
      在org.junit.runners.ParentRunner上$ 2.evaluate(ParentRunner.java:222)
      在org.junit.runners.ParentRunner.run(ParentRunner.java:292)
      在org.junit.runner.JUnitCore.run(JUnitCore.java:157)
      在com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:74)
      在com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:211)
      在com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:67)
      在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
      在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      在com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
  引起原因:de.hybris.bootstrap.config.BootstrapConfigException:无法确定platformhome
      在de.hybris.bootstrap.config.ConfigUtil.getPlatformHome(ConfigUtil.java:136)
      在de.hybris.bootstrap.config.ConfigUtil.getPlatformConfig(ConfigUtil.java:354)
      在de.hybris.bootstrap.config.ConfigUtil.loadLog4JProperties(ConfigUtil.java:369)
      在de.hybris.platform.core.Log4JUtils.readConfig(Log4JUtils.java:105)
      在de.hybris.platform.core.Log4JUtils.startup(Log4JUtils.java:59)
      在de.hybris.platform.core.Registry。(Registry.java:67)
      ...更多42
  原因:de.hybris.bootstrap.config.BootstrapConfigException:无法确定core-items.xml的路径
      在de.hybris.bootstrap.config.ConfigUtil.getPlatformHome(ConfigUtil.java:85)
      ...更多47
 
 
  java.lang.ExceptionInInitializerError
      在sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)处
      在sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
      在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
      在java.lang.reflect.Constructor.newInstance(Constructor.java:526)
      在org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:31)
      在org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:24)
      在org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
      在org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
      在org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
      在org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:98)
      在org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:84)
      在com.intellij.junit4.JUnit46ClassesRequestBuilder.collectWrappedRunners(JUnit46ClassesRequestBuilder.java:90)
      在com.intellij.junit4.JUnit46ClassesRequestBuilder.getClassesRequest(JUnit46ClassesRequestBuilder.java:51)
      在com.intellij.junit4.JUnit4TestRunnerUtil.buildRequest(JUnit4TestRunnerUtil.java:91)
      在com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:39)
      在com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:211)
      在com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:67)
      在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
      在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      在com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
  引起原因:de.hybris.bootstrap.config.BootstrapConfigException:无法确定platformhome
      在de.hybris.bootstrap.config.ConfigUtil.getPlatformHome(ConfigUtil.java:136)
      在de.hybris.bootstrap.config.ConfigUtil.getPlatformConfig(ConfigUtil.java:354)
      在de.hybris.bootstrap.config.ConfigUtil.loadLog4JProperties(ConfigUtil.java:369)
      在de.hybris.platform.core.Log4JUtils.readConfig(Log4JUtils.java:105)
      在de.hybris.platform.core.Log4JUtils.startup(Log4JUtils.java:59)
      在de.hybris.platform.testframework.HybrisJUnit4ClassRunner。(HybrisJUnit4ClassRunner.java:54)
      ...另外22个
  原因:de.hybris.bootstrap.config.BootstrapConfigException:无法确定core-items.xml的路径
      在de.hybris.bootstrap.config.ConfigUtil.getPlatformHome(ConfigUtil.java:85)
      ...另外27个


  

我的代码:

  @Test
  公共无效testGetProduct()引发异常{


      最终的ProductModel productModel = new ProductModel();
      productModel.setCode(" TEST_CODE");

      assert(true);
  }

  

我错过了一些配置吗?

非常感谢!

格里兹

付费偷看设置
发送
6条回答
闻人可可
1楼 · 2020-09-03 12:11.采纳回答

多米尼克,你好

我认为这仅仅是由于您的测试课程。 我没有在类的顶部找到@unittest批注,这将有助于Hybris将该类标识为单元测试类。

另一种是在编写单元测试类时,不需要实例化模型类,可以像下面的代码一样使用模仿框架。 请尝试并检查。

  ProductModel productModel = Mockito.mock(ProductModel .class);
  Mockito.when(productModel .getCode())。thenReturn(" TEST");
  

我想问题是当您在测试类中实例化模型时,它会查询资源路径,这对于单元测试用例将不可用,因此请使用Mockito框架并尝试它应该起作用。

此致

Raghavendra。

2楼-- · 2020-09-03 12:05

您是否已在hAC中初始化并激活了jUnit租户?

哎,真难
3楼-- · 2020-09-03 12:15

嘿卢克,

谢谢您的回答,是的,我初始化了jUnit租户,并且还查看了为jUnit租户激活了我的扩展程序...我还注意在执行单元测试期间服务器未在运行。 ..我非常沮丧,因为我不知道如何解决我的问题...

屏幕截图hAC:

替代文字

我的单元测试班:

 公共类DefaultMyProductFacadeTest {
 
 
      私人DefaultMyProductFacade myProductFacade;
 
      私有ProductService productService;
 
      私有ModelService modelService;
 
 
      @之前
      公共无效setUp()引发异常{
 
          myProductFacade =新的DefaultMyProductFacade();
 
          productService =模拟(ProductService.class);
          modelService =模拟(ModelService.class);
 
          myProductFacade.setProductService(productService);
          myProductFacade.setModelService(modelService);
 
      }
 
      @测试
      公共无效testGetProduct()引发异常{
 
          ProductModel productModel = new ProductModel();
          productModel.setCode(" TEST");
          productModel.setName("测试产品");
          productModel.setManufacturerName(" TEST");
          productModel.setManufacturerAID(" EANFHFJF");
          productModel.setDescription("我的描述");
          productModel.setEan(" DSDSD");
          productModel.setApprovalStatus(ArticleApprovalStatus.CHECK);
 
          assert(true);
      }
    
  }

  

如果有人可以帮助我解决我的问题,我会花些啤酒!

非常感谢!

Greetz

SAP浪
4楼-- · 2020-09-03 12:23

嗨,多米尼克,

我写了一篇有关单元测试和服务层测试之间差异的文章。 您可能会明白,为什么必须在单元测试中模拟模型。

http: //ecommercecandles.com/en/hybris-ecommerce-platform-main/16-testing/16-writing-integration-and-unit-tests

小熊yu生菜
5楼-- · 2020-09-03 12:07

嘿Raghavendra,

非常感谢您的回答,我现在创建了ProductModel的模拟,它可以正常工作。 但是我不明白为什么他们在试验中不使用模拟……手工模型和ProductModel之间有区别吗?

链接到足迹:

https://wiki.hybris.com/display/tr52/Trail +〜+ Testing + the + Facade

Greetz

小熊yu生菜
6楼-- · 2020-09-03 12:20

私有ProductModel getProductModel(){

最终ItemModelInternalContext上下文= ItemContextBuilder 
.createMockContextBuilder(CustomerModel.class,PK.NULL_PK,Locale.ENGLISH,Collections.emptyMap())
.build(); 最终的ProductModel productModel = new ProductModel(context); return productModel;}

一周热门 更多>