wicket和AtUnit

如何解决wicket和AtUnit

| 我已经开始使用Wicket,并且选择了Guice作为依赖项注入框架。现在,我正在尝试学习如何为WebPage对象编写单元测试。 我搜索了一下,发现了这篇文章,但其中提到了AtUnit,因此我决定尝试一下。 我的WebPage类看起来像这样
public class MyWebPage extends WebPage
{
    @Inject MyService service;
    public MyWebPage()
    {
        //here I build my components and use injected object.
        service.get(id);
        ....    
    }
}
我创建了模拟来用它替换任何生产MyServiceImpl,我想与AtUnit一起使用的Guice应该注入它。 现在的问题是: AtUnit希望我用@Unit标记目标对象-没关系,因为我可以将已创建的对象传递给WicketTester
@Unit MyWebPage page = new MyWebPage();
wicketTester.startPage(page);
但通常我会用类名调用startPage。 我认为AtUnit也希望目标对象与@Inject一起进入市场,以便AtUnit可以创建和管理它-但我得到了org.apache.wicket.WicketRuntimeException:当前线程主线程上没有附加应用程序。我可以指示AtUnit使用wicketTester的应用程序吗? 因为我不在MyWebPage上使用@Inject(我认为),所以应该由Guice注入的所有对象都为null(在我的示例中,服务引用为null) 我真的在Wicket环境中找不到关于AtUnit的任何信息。我做错什么了吗,我错过了什么吗?     

解决方法

        我不知道AtUnit,但我将wicket与guice和TestNG一起使用。我认为AtUnit应该以相同的方式工作。重要的一点是使用guice创建Web应用程序。 在这里,我将所有这些东西捆绑在一起进行测试。 我的所有测试都有一个抽象基类:
public abstract class TesterWicket<T extends Component> {

 @BeforeClass
    public void buildMockedTester() {
        System.out.println(\"TesterWww.buildMockedTester\");
        injector = Guice.createInjector(buildModules());
        CoachWebApplicationFactory instance = 
            injector.getInstance(CoachWebApplicationFactory.class);
        WebApplication application = instance.buildWebApplication();
        tester = new WicketTester(application);
    }

protected abstract List<Module> buildModules();
初始化是针对每个测试类进行的。子类在buildModules方法中定义了测试所需的模块。 在我的IWebApplicationFactory中,添加ѭ3。这样,在所有组件实例化之后,由Guice填充带有@Inject注释的字段:
public class CoachWebApplicationFactory implements IWebApplicationFactory {

  private static Logger LOG = LoggerFactory.getLogger(CoachWebApplicationFactory.class);

  private final Injector injector;

  @Inject
  public CoachWebApplicationFactory(Injector injector) {
      this.injector = injector;
  }

  public WebApplication createApplication(WicketFilter filter) {
    WebApplication app = injector.getInstance(WebApplication.class);
    Application.set(app);
    app.addComponentInstantiationListener(new GuiceComponentInjector(app,injector));
    return app;
  }
} 
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?