如何解决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 举报,一经查实,本站将立刻删除。