Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用CDI进行测试,模拟bean_Java_Java Ee 6_Cdi_Jboss Weld_Weld - Fatal编程技术网

Java 使用CDI进行测试,模拟bean

Java 使用CDI进行测试,模拟bean,java,java-ee-6,cdi,jboss-weld,weld,Java,Java Ee 6,Cdi,Jboss Weld,Weld,我想知道我是如何使用CDI进行测试的。以及在注入期间模拟类 如果我有这门课: @Named @RequestScoped public class ItemProcessor { @Inject private ItemDao itemDao; public void execute() { List<Item> items = itemDao.fetchItems(); for (Item item : items) { Sys

我想知道我是如何使用CDI进行测试的。以及在注入期间模拟类

如果我有这门课:

@Named
@RequestScoped
public class ItemProcessor {

  @Inject
  private ItemDao itemDao;


  public void execute() {


    List<Item> items = itemDao.fetchItems();
    for (Item item : items) {
        System.out.println("Found item " + item);
    }
  }
}
@Named
@请求范围
公共类项目处理器{
@注入
私有ItemDao ItemDao;
public void execute(){
List items=itemDao.fetchItems();
用于(项目:项目){
系统输出打印项次(“找到的项”+项);
}
}
}

如果我想在测试期间模拟ItemDao类,当我想测试我的ItemProcessor时该怎么办?

像mockito这样的框架,即使在使用字段注入时,也可以将依赖项设置为模拟:


然而,一般来说,构造函数注入是首选的,因为这是一个确切的原因:可测试性。

例如,您可以使用CDI“替代品”

现在,这个bean只有在您的beans.xml中声明为替代项时才会使用

<alternatives>
    <class>package.TestCoderImpl</class>
</alternatives>

我可以在没有@Alternative注释的情况下使用普通bean,并在测试期间执行该操作吗?当然,普通bean不会有@Alternative注释,测试bean会有它。您可以通过在beans.xml中放置上述标记来激活替代bean。非常感谢您的帮助:)是否可以仅在@product方法上执行相同的操作?您可以根据条件在producer方法中创建bean,请参阅。或者,有一个更高级的解决方案。谢谢你的帮助,但是在哪里可以找到更多关于Csaba的内容。我认为你对构造函数注入的评论是这个答案最好的部分。
<alternatives>
    <class>package.TestCoderImpl</class>
</alternatives>