我是一个非常简单的测试:
@RunWith(Arquillian.class)
public class SimpleTest
{
@Inject private SingleEntity singleEntity;
@Deployment
public static WebArchive createDeployment()
{
return ShrinkWrap.create(WebArchive.class)
.addClass(SingleEntity.class)
.addAsWebInfResource(EmptyAsset.INSTANCE, ArchivePaths.create("beans.xml"));
}
@Test
public void categorize()
{
assertNotNull(this.singleEntity);
}
}
我只想注入SingleEntity
类型的对象。 SingleEntity
是一个POJO:
public class SingleEntity
{
private String id;
private String description;
public SingleEntity(String id, String description) {
super();
this.id = id;
this.description = description;
}
//getters & setters
}
之后,我执行了gradle test
。我已经配置了测试,以便Arquillian在Wildfly嵌入式实例中执行它们:
<arquillian xmlns="http://jboss.org/schema/arquillian"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd">
<container qualifier="jboss" default="true">
<configuration>
<!-- Supported property names: [managementPort, username, managementAddress, bundlePath, managementProtocol,
cleanServerBaseDir, jbossHome, password, modulePath] -->
<property name="jbossHome">C:\servers\wildfly-Test-8.2.0.Final</property>
<property name="modulePath">C:\servers\wildfly-Test-8.2.0.Final\modules\</property>
<!-- <property name="managementPort">8888</property> -->
</configuration>
</container>
</arquillian>
这很简单,但我收到一个例外,告诉我SingleEntity
无法解决:
引起:org.jboss.weld.exceptions.DeploymentException:WELD-001408:对于具有限定符@Efault的类型SingleEntity的不满意依赖
注入点[BackedAnnotatedField] @Inject private com.jeusdi.arquillian.SimpleTest.singleEntity
at com.jeusdi.arquillian.SimpleTest.singleEntity(SimpleTest.java:0)
有什么想法吗? 谢谢大家
答案 0 :(得分:2)
通常,您不想注入实体。 JPA基于类名,CDI使用代理而不是具体类。这导致注入不同的类。
现在这只是最好的做法。如果你尝试前进,你可能仍会遇到其他错误,但如果一切正确,你不应该得到这个错误。
您的实体没有定义注释的bean。如果你正在使用CDI 1.2(wildfly 8.2提供),并且你的beans.xml没有明确地列出bean-discovery-mode=all
,那么这个实体就不会被选中。