1

我正在为我的 wicket 应用程序编写测试,并且需要将 Spring Bean 注入页面(通过注释完成)来执行此操作。考虑以下代码:

protected void setUp() {
  tester = new WicketTester();
  scanService = new ScanService();

  ApplicationContextMock appctx=new ApplicationContextMock();
  appctx.putBean("pxGenericService", new PxGenericServiceImpl());

  tester.getApplication().getComponentInstantiationListeners().add(new SpringComponentInjector(tester.getApplication(), appctx));
}

这实际上似乎有效(没有空指针)。问题是:bean 有一个资源(带有@Resource 注释的变量),当我在页面上运行测试时,这个资源结果为空(nullpointer 异常)。我该如何解决这个问题?

4

2 回答 2

0

您还必须将 bean 具有的所有依赖项的实例添加到模拟应用程序上下文中。因此,将使用的类的实例添加PxGenericServiceImplappctx.

于 2013-03-25T15:48:16.797 回答
0

我认为不SpringComponentInjector支持@Resource. 唯一受支持的注释是@SpringBean@Inject。见AnnotProxyFieldValueFactory

@Override
public boolean supportsField(final Field field)
{
    return field.isAnnotationPresent(SpringBean.class) || field.isAnnotationPresent(Inject.class);
}
于 2013-03-26T09:04:00.570 回答