WicketTester和CDI单元的单元测试在Eclipse中工作,但在Maven构建期间失败。我错过了什么?
我正在尝试使用CDI单元测试我的Wicket组件,这些组件使用CDI进行依赖项注入。测试在Eclipse中似乎工作得很好,但在我的Maven构建过程中失败了,我似乎找不到任何提示和错误 我创建了一个简单的抽象WicketPanelWicketTester和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
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)
.....