【发布时间】:2018-04-28 19:27:39
【问题描述】:
我正在尝试使用 JavaEE 做简单的应用程序,目前我被 arquillian 测试困住了。我有一个这样的 BookRepository 类:
package com.pluralsight.bookstore.repository;
import javax.transaction.Transactional;
import static javax.transaction.Transactional.TxType.SUPPORTS;
@Transactional(SUPPORTS)
public class BookRepository {
}
和测试类 BookRepositoryTest :
package com.pluralsight.bookstore.repository;
@RunWith(Arquillian.class)
public class BookRepositoryTest {
@Inject
private BookRepository bookRepository;
@Deployment
public static JavaArchive createDeployment() {
return ShrinkWrap.create(JavaArchive.class)
.addClass(BookRepository.class)
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml")
.addAsManifestResource("META-INF/test-persistence.xml", "persistence.xml");
}
@Test
public void create() {
assertNotNull(bookRepository);
}
}
运行测试结果:
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 9.864 sec <<< FAILURE!
create(com.pluralsight.bookstore.repository.BookRepositoryTest) Time elapsed: 0.287 sec <<< ERROR!
java.lang.NullPointerException
at com.pluralsight.bookstore.repository.BookRepositoryTest.create(BookRepositoryTest.java:38)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
...
没有任何解释。当我检查 assertNotNull 时, bookRepository 始终为空,所以我猜注入在这里不起作用。项目结构如下所示:
我尝试寻找答案已有一段时间了,但我仍然在同一个地方。对于容器,我使用 Wildfly 远程运行测试,并在后台运行 WildFly。 提前感谢您的帮助!
【问题讨论】:
-
是 bookRepository 属性/变量被设置还是为空?
-
@JeffreyPhillipsFreeman 我认为它正在通过注入进行初始化。我正在学习关于复数视觉的课程,这一切都通过了。但是这门课程并不新鲜,也许从那以后发生了一些变化。那么它应该在测试中的某个地方初始化吗?除了书籍模型和语言枚举之外,我粘贴的代码是我现在唯一拥有的代码。
-
@Animu 假设您在某处的配置中没有出错,注入注解可能会为您初始化它。为什么不手动检查它的值是否为 null 以确保我们可以排除这种可能性。
-
啊,在这种情况下,似乎 是 你的问题。问题是注入不起作用并且 bookRepository 为空。所以这真的缩小了如何解决这个问题。
-
@MaxVollmer 更改为最少的代码。再次感谢您的通知:)
标签: java integration-testing jboss-arquillian