作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经为一个小型 Web 应用程序编写了几个测试,但当我尝试运行使用 WicketTester 的页面特定测试时,出现错误。
Google 将我发送到 Apache Wicket 的邮件列表,其中用户遇到了相同的异常。他/她说问题是 AnnotApplicationContextMock 在 Wicket 应用程序之前初始化。我也粘贴了我的 WicketApplication 类。
你们之前处理过这个错误吗?我已经粘贴了下面的异常和类。
异常(exception):
-------------------------------------------------------------------------------Test set: com.upbeat.shoutbox.web.TestViewShoutsPage-------------------------------------------------------------------------------Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 1.545 sec (AnnotApplicationContextMock.java:61) at com.upbeat.shoutbox.web.TestViewShoutsPage.setUp(TestViewShoutsPage.java:30) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.junit.internal.runners.MethodRoadie.runBefores(MethodRoadie.java:129) at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:93) at org.unitils.UnitilsJUnit4TestClassRunner$CustomMethodRoadie.runBeforesThenTestThenAfters(UnitilsJUnit4TestClassRunner.java:168) at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:84) at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:49) at org.unitils.UnitilsJUnit4TestClassRunner.invokeTestMethod(UnitilsJUnit4TestClassRunner.java:127) at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:59) at org.unitils.UnitilsJUnit4TestClassRunner.access$000(UnitilsJUnit4TestClassRunner.java:42) at org.unitils.UnitilsJUnit4TestClassRunner$1.run(UnitilsJUnit4TestClassRunner.java:87) at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:34) at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44) at org.unitils.UnitilsJUnit4TestClassRunner.run(UnitilsJUnit4TestClassRunner.java:94) at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62) at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140) at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127) at org.apache.maven.surefire.Surefire.run(Surefire.java:177) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345) at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1009)
我的页面特定测试类:
package com.upbeat.shoutbox.web;import org.apache.wicket.application.IComponentInstantiationListener;import org.apache.wicket.protocol.http.WebApplication;import org.apache.wicket.spring.injection.annot.SpringComponentInjector;import org.apache.wicket.spring.injection.annot.test.AnnotApplicationContextMock;import org.apache.wicket.util.tester.FormTester;import org.apache.wicket.util.tester.WicketTester;import org.junit.Before;import org.junit.Test;import org.unitils.spring.annotation.SpringBeanByType;import com.upbeat.shoutbox.WicketApplication;import com.upbeat.shoutbox.integrations.AbstractIntegrationTest;import com.upbeat.shoutbox.persistence.ShoutItemDao;import com.upbeat.shoutbox.services.ShoutService;import com.upbeat.shoutbox.web.pages.ViewShoutsPage;public class TestViewShoutsPage extends AbstractIntegrationTest { @SpringBeanByType private ShoutService svc; @SpringBeanByType private ShoutItemDao dao; protected WicketTester tester; @Before public void setUp() { final AnnotApplicationContextMock appctx = new AnnotApplicationContextMock(); appctx.putBean("ShoutItemDao", dao); appctx.putBean("ShoutService", svc); tester = new WicketTester(new WicketApplication() { @Override protected IComponentInstantiationListener getSpringComponentInjector(WebApplication app) { return new SpringComponentInjector(app, appctx, false); } }); } @Test public void testRenderPage() { tester.startPage(ViewShoutsPage.class); tester.assertRenderedPage(ViewShoutsPage.class); FormTester ft = tester.newFormTester("addShoutForm"); ft.setValue("nickname", "test-nickname"); ft.setValue("content", "a whole lot of content"); ft.submit(); tester.assertRenderedPage(ViewShoutsPage.class); tester.assertContains("test-nickname"); tester.assertContains("a whole lot of content"); }}
抽象集成测试:
package com.upbeat.shoutbox.integrations;import org.springframework.context.ApplicationContext;import org.unitils.UnitilsJUnit4;import org.unitils.spring.annotation.SpringApplicationContext;@SpringApplicationContext({"/com/upbeat/shoutbox/spring/applicationContext.xml", "applicationContext-test.xml"})public abstract class AbstractIntegrationTest extends UnitilsJUnit4 { private ApplicationContext applicationContext;}
Wicket应用程序:
package com.upbeat.shoutbox;import org.apache.wicket.application.IComponentInstantiationListener;import org.apache.wicket.protocol.http.WebApplication;import org.apache.wicket.request.target.coding.IndexedParamUrlCodingStrategy;import org.apache.wicket.spring.injection.annot.SpringComponentInjector;import com.upbeat.shoutbox.web.pages.ParamPage;import com.upbeat.shoutbox.web.pages.VeryNiceExceptionPage;/** * Application object for your web application. If you want to run this application without deploying, run the Start class. * * @see com.upbeat.shoutbox.Start#main(String[]) */public class WicketApplication extends WebApplication{ /** * Constructor */ public WicketApplication() { } /** * @see org.apache.wicket.Application#getHomePage() */ public Class getHomePage() { return HomePage.class; } @Override protected void init() { super.init(); // Enable wicket ajax debug getDebugSettings().setAjaxDebugModeEnabled(true); addComponentInstantiationListener(getSpringComponentInjector(this)); // Mount pages mountBookmarkablePage("/home", HomePage.class); mountBookmarkablePage("/exceptionPage", VeryNiceExceptionPage.class); mount(new IndexedParamUrlCodingStrategy("/view_params", ParamPage.class)); } protected IComponentInstantiationListener getSpringComponentInjector(WebApplication app) { return new SpringComponentInjector(app); }}
最佳答案
我能够修复它,似乎 Wicket 邮件列表中的用户是对的,我只是直到现在才得到它。
通过将 AnnotApplicationContextMock 的初始化移至 WicketApplication getSpringComponentInjector 方法内部,我能够运行测试。
@Before public void setUp() { tester = new WicketTester(new WicketApplication() { @Override protected IComponentInstantiationListener getSpringComponentInjector(WebApplication app) { AnnotApplicationContextMock appctx = new AnnotApplicationContextMock(); appctx.putBean("shoutItemDao", dao); appctx.putBean("shoutService", svc); return new SpringComponentInjector(app, appctx, true); } });
关于java - Wicket 测试 - AnnotApplicationContextMock - 没有应用程序附加到当前线程主线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2770894/
我已经为一个小型 Web 应用程序编写了几个测试,但当我尝试运行使用 WicketTester 的页面特定测试时,出现错误。 Google 将我发送到 Apache Wicket 的邮件列表,其中用户
我是一名优秀的程序员,十分优秀!