4

我一直在尝试让 wicket 和 guice 一起工作,更具体地说,使用 guice 将外观(或控制器,等等)注入网页。问题似乎是我不能在网页中进行除现场注入之外的任何其他注入。如果我尝试使用 setter 注入,则不会调用 setter。构造函数注入网页似乎是不可能的(或者我没有找到如何)。

因此,在网页中注入时,我似乎将现场注入作为唯一的可能性。

首先,任何人都可以确认这是正确的吗?我似乎在 apache 的网站上发现,从 wicket 1.5 开始,setter injection 不起作用(顺便说一句,我在 6 上),但没有找到更多关于它的信息。

其次,如果确实只能在网页中进行字段注入,我怎么能用 guice 干净地对字段注入进行单元测试?(我正在考虑一个模拟测试,我只需要知道在按下按钮后使用正确的参数正确调用了有问题的外观,外观本身可以在另一个单元测试中进行测试)。

没有提供任何代码,因为这个问题似乎相当基本。如果需要,我会放一些片段

卡斯帕

4

3 回答 3

3

我也一直在为此苦苦挣扎。集成最终非常顺利:

http://software.danielwatrous.com/wicket-guice-including-unittests/

按照这种方法,注入器被注入,这提供了充分的灵活性。

于 2012-10-15T17:00:53.907 回答
0

据我所知,wicket IoC 模块只为组件提供字段注入,因此没有简单的方法可以从 setter 向组件注入一些东西。您可以通过阅读 Wicket-IoC/Wicket-Guice 源代码来确认这一点。

要清除注入的字段,您可以使用 Java reflation API 将其设为 field null。但是,Page 在测试后可能会有一些状态。所以我建议在每次测试后简单地重新创建页面。

于 2012-10-06T18:31:19.787 回答
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);
}
于 2012-10-08T07:45:58.397 回答