我一直试图让wicket和guice一起工作,更具体地说是将门面(或控制器,无论如何)注入网页,并带有guice。问题似乎是我不能在网页中进行任何其他注入而不是注入。如果我尝试使用setter注入,则不会调用setter。构造函数注入到网页似乎不可能(或者我没有找到)。
所以,在网页中注入时,我似乎只留下了现场注入。
首先,任何人都可以确认这是正确的吗?我似乎在apache的网站上发现,setter注入不能像wicket 1.5那样工作(顺便说一下我已经6点了)但是还没有找到关于它的更多信息。
其次,如果确实只能在网页上进行现场注射,我怎样才能用guice干净地对现场注入进行单元测试? (我正在考虑进行模拟测试,我需要知道的是,在按下按钮后,正确的参数可以在正确的参数中正确调用,正面本身可以在另一个单元测试中进行测试)。
没有提供任何代码,因为这个问题似乎很基本。如果需要,我会加入一些片段
卡斯帕
答案 0 :(得分:3)
我也一直在努力解决这个问题。整合最终非常顺利:
http://software.danielwatrous.com/wicket-guice-including-unittests/
按照这种方法注入注射器,这提供了充分的灵活性。
答案 1 :(得分:0)
据我所知,wicket IoC模块仅为组件提供字段注入,因此没有简单的方法从setter向组件注入内容。您可以通过阅读Wicket-IoC / Wicket-Guice源代码来确认这一点。
要清除注入的字段,可以使用Java reflation API使其成为字段null
。但是,测试后,Page可能会有一些状态。因此,我建议您在每次测试后重新创建页面。
答案 2 :(得分:0)
我使用Wicket和Guice进行模拟测试。您可以看到我如何绑定所有内容http://blog.yanivkessler.com/2010/05/wicket-and-guice-alternate-route.html(我在Gaetan下的评论)
测试不是问题,因为注入是由Component构造函数完成的。就我而言,我对Component进行了一些小测试,根据用户的交互来检查对模拟服务的调用。
这是我的测试初始化的简化版本。
@BeforeClass
public void buildMockedTester() {
List<Module> modules = buildModules();
injector = Guice.createInjector(modules);
MyApplicationFactory instance = injector.getInstance(MyApplicationFactory.class);
WebApplication application = instance.buildWebApplication();
tester = new WicketTester(application);
}