Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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
WicketTester和CDI单元的单元测试在Eclipse中工作,但在Maven构建期间失败。我错过了什么?_Cdi_Weld_Wicket 6_Wicket Tester_Cdi Unit - Fatal编程技术网

WicketTester和CDI单元的单元测试在Eclipse中工作,但在Maven构建期间失败。我错过了什么?

WicketTester和CDI单元的单元测试在Eclipse中工作,但在Maven构建期间失败。我错过了什么?,cdi,weld,wicket-6,wicket-tester,cdi-unit,Cdi,Weld,Wicket 6,Wicket Tester,Cdi Unit,我正在尝试使用CDI单元测试我的Wicket组件,这些组件使用CDI进行依赖项注入。测试在Eclipse中似乎工作得很好,但在我的Maven构建过程中失败了,我似乎找不到任何提示和错误 我创建了一个简单的抽象WicketPanel public abstract class MyPanel extends Panel{ private static final long serialVersionUID = 4132041261965905788L; private final Re

我正在尝试使用CDI单元测试我的Wicket组件,这些组件使用CDI进行依赖项注入。测试在Eclipse中似乎工作得很好,但在我的Maven构建过程中失败了,我似乎找不到任何提示和错误

我创建了一个简单的抽象WicketPanel

public abstract class MyPanel extends Panel{

  private static final long serialVersionUID = 4132041261965905788L;

  private final RepeatingView rw;

  @Inject 
  transient ReflectiveComponentFactory factory;

  public MyPanel(String id) {
    super(id);
    rw = new RepeatingView(OVERLAY_COMPONENT_GROUP_ID);
    add(rw);
  }

  @Override
  public <CT extends Component> CT addComponent(Class<CT> componentType) {
    return addComponent(componentType, OVERLAY_COMPONENT_ID);
  }

  protected <CT extends Component> CT addComponent(Class<CT> componentType, String overlayComponentId) {
    WebMarkupContainer collapsableGroup = new WebMarkupContainer(rw.newChildId());
    rw.add(collapsableGroup);

    CT component = factory.createComponent(componentType, overlayComponentId);
    collapsableGroup.add(component);

    return component;
  }
}
我没有包括TestPanel,但它非常简单(或多或少是空的)

当我在Eclipse中执行此操作时,测试以绿色通过

当我使用Maven执行此操作时,我得到以下结果:

org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active contexts for scope type javax.enterprise.context.Dependent
  at org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:578)
  at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:608)
  at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:674)
  at org.jboss.weld.injection.FieldInjectionPoint.inject(FieldInjectionPoint.java:136)
  at org.jboss.weld.util.Beans.injectBoundFields(Beans.java:763)
  at org.jboss.weld.util.Beans.injectFieldsAndInitializers(Beans.java:772)
  at org.jboss.weld.manager.SimpleInjectionTarget$1.proceed(SimpleInjectionTarget.java:106)
  at org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:48)
  at org.jboss.weld.manager.SimpleInjectionTarget.inject(SimpleInjectionTarget.java:102)
  at org.apache.wicket.cdi.NonContextual.postConstruct(NonContextual.java:129)
  at org.apache.wicket.cdi.NonContextualManager.postConstruct(NonContextualManager.java:65)
  at org.apache.wicket.cdi.DetachEventEmitter.<init>(DetachEventEmitter.java:55)
  at org.apache.wicket.cdi.CdiConfiguration.configure(CdiConfiguration.java:196)
  .....
org.jboss.weld.context.contextNotActivieException:weld-001303作用域类型javax.enterprise.context.Dependent没有活动上下文
位于org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:578)
位于org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:608)
位于org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:674)
在org.jboss.weld.injection.FieldInjectionPoint.injecte(FieldInjectionPoint.java:136)
位于org.jboss.weld.util.Beans.injectBoundFields(Beans.java:763)
在org.jboss.weld.util.Beans.injectFieldsAndInitializers上(Beans.java:772)
在org.jboss.weld.manager.SimpleInjectTarget$1.Processing(SimpleInjectTarget.java:106)
位于org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:48)
在org.jboss.weld.manager.SimpleInjectTarget.inject(SimpleInjectTarget.java:102)上
位于org.apache.wicket.cdi.nontext.postConstruct(nontext.java:129)
位于org.apache.wicket.cdi.nontextualmanager.postConstruct(nontextualmanager.java:65)
位于org.apache.wicket.cdi.DetachEventEmitter。(DetachEventEmitter.java:55)
位于org.apache.wicket.cdi.CdiConfiguration.configure(CdiConfiguration.java:196)
.....

有什么线索表明我做错了什么吗?

问题是由cdi单元版本2.0.8中的错误引起的。Bryn解决了该问题(请参阅),因此,如果使用cdi 2.0.9或更高版本,则不会出现该问题

@RunWith(CdiRunner.class)
@AdditionalClasses(value={ReflectiveComponentFactory.class})
public class MyPanelTest {
  private WicketTester tester;

  @Inject
  private BeanManager beanManager;

  @Before
  public void setup() {
    tester = new WicketTester();
    new CdiConfiguration(beanManager).setPropagation(ConversationPropagation.NONE).configure(tester.getApplication());
  }

  @Test
  public void testAddComponentWithClass() {
    MyPanelTested myPanel = new MyPanelTested("someId");
    TestPanel panel1 = myPanel.addComponent(TestPanel.class);
    TestPanel panel2 = myPanel.addComponent(TestPanel.class);

    tester.startComponentInPage(myPanel);
    tester.assertComponent(panel1.getPageRelativePath(), TestPanel.class);
    tester.assertComponent(panel2.getPageRelativePath(), TestPanel.class);
    tester.assertComponent(panel1.getPageRelativePath() + ":text", Label.class);
    tester.assertComponent(panel2.getPageRelativePath() + ":text", Label.class);
  }
}

@SuppressWarnings("serial")
class MyPanelTested extends MyPanel {
  public MyPanelTested(String id) {
    super(id);
  }
}
org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active contexts for scope type javax.enterprise.context.Dependent
  at org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:578)
  at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:608)
  at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:674)
  at org.jboss.weld.injection.FieldInjectionPoint.inject(FieldInjectionPoint.java:136)
  at org.jboss.weld.util.Beans.injectBoundFields(Beans.java:763)
  at org.jboss.weld.util.Beans.injectFieldsAndInitializers(Beans.java:772)
  at org.jboss.weld.manager.SimpleInjectionTarget$1.proceed(SimpleInjectionTarget.java:106)
  at org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:48)
  at org.jboss.weld.manager.SimpleInjectionTarget.inject(SimpleInjectionTarget.java:102)
  at org.apache.wicket.cdi.NonContextual.postConstruct(NonContextual.java:129)
  at org.apache.wicket.cdi.NonContextualManager.postConstruct(NonContextualManager.java:65)
  at org.apache.wicket.cdi.DetachEventEmitter.<init>(DetachEventEmitter.java:55)
  at org.apache.wicket.cdi.CdiConfiguration.configure(CdiConfiguration.java:196)
  .....