java 在单元测试中测试Vaadin视图会生成VaadinService,getCurrent()”为null

2w3rbyxf  于 2023-03-11  发布在  Java
关注(0)|答案(1)|浏览(131)

我正在测试一个Vaadin视图,其中一个Component是一个包含ApexCharts的div。
当我测试页面的另一个组件(一些网格)时,我收到以下错误:
java.lang.NullPointerException:无法调用“com.vaadin.flow.server.VaadinService.getDeploymentConfiguration()”,因为“com.vaadin.flow.server.VaadinService.getCurrent()”的返回值为空
对于ApexChartsBuilder.get()...build()
为什么?

sd2nnvve

sd2nnvve1#

当视图被单独示例化时,框架的内部类(如UI、VaadinSession、VaadinService等)不会自动示例化。这意味着VaadinService.getCurrent()、UI.getCurrent()将返回null,因为尚未设置线程局部变量。
如果你想在你的视图上做单元测试,你需要模拟Vaadin的内部类。对于简单的情况来说,这并不难做,但是在更复杂的情况下,这可能是一个很深的兔子洞。
你可以在这里找到一个简单的组件UI单元测试和基本的Vaadin模拟:
https://github.com/TatuLund/bean-table/blob/nextlts/src/test/java/org/vaadin/tatu/BeanTableTest.java
在Vaadin 23中,商业TestBench附加组件附带了UI Unit Test库,它基本上包含了这些模拟,在Vaadin 14中,您可以尝试使用Karibu,它基本上是相同的。
您可以在此处找到视图的UI单元测试示例
https://github.com/TatuLund/TwinColSelect/blob/nextlts/src/test/java/org/vaadin/tatu/ViewTest.java

相关问题