У меня есть WicketPage с закачиваемой поле с КДИ следующим образом:Mocking впрыскивается поля с @ javax.inject.Inject с Mockito и калитка вызывает Калитка для лечения в поле ребенка компонента
public class Page extends BaseWebPage {
private static final long serialVersionUID = 1L;
@Inject
private Facade facade;
public Page() {
super("Title");
}
}
У меня есть UnitTest в котором я высмеиваю указанное поле:
@RunWith(MockitoJUnitRunner.class)
public class PageTest{
@Mock
private Facade facadeMock;
@InjectMocks
private Page cut;
WicketTester tester = new WicketTester(new MockApplication());
@Before
public void setUp() {
Entity entity = newEntity("1", "John"));
Mockito.when(facadeMock.find()).thenReturn(entity);
}
@Test
public void testOverzicht() {
tester.startPage(cut);
//below line throws stackTrace
tester.assertRenderedPage(Page.class);
}
}
Странно, Калитка не может понять смысл моего впрыскиваемого макета. В какой-то момент Wicket начинает обрабатывать компоненты, из которых FacadeMock внезапно становится одним. Затем он не выполняет экземпляр проверки компонентов, который не работает, потому что он- это прокси-сервер Mockito'd, который заставляет Wicket выкидывать исключение IllegalArgumentException. Затем он продолжает разбираться, а затем отбрасывать facadeMock в Object [] в его метод отсоединения. Stacktrace добавлено ниже для пояснения, которое вызывает исключение classCastException.
ПРИМЕЧАНИЕ. Имена классов и пакетов изменены в целях конфиденциальности.
java.lang.IllegalArgumentException: Unknown type of object facadeMock
at org.apache.wicket.MarkupContainer.getId(MarkupContainer.java:1068)
at org.apache.wicket.MarkupContainer.children_indexOf(MarkupContainer.java:1130)
at org.apache.wicket.MarkupContainer.put(MarkupContainer.java:1318)
at org.apache.wicket.MarkupContainer.add(MarkupContainer.java:175)
at nl.app.Page.onInitialize(Page.java:53)
at org.apache.wicket.Component.fireInitialize(Component.java:877)
at org.apache.wicket.MarkupContainer.internalInitialize(MarkupContainer.java:961)
at org.apache.wicket.Page.isPageStateless(Page.java:463)
at org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:244)
at org.apache.wicket.util.tester.BaseWicketTester$LastPageRecordingPageRendererProvider$1.respond(BaseWicketTester.java:2755)
at org.apache.wicket.core.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:175)
at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:890)
at org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64)
at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:261)
at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:218)
at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:289)
at org.apache.wicket.util.tester.BaseWicketTester.processRequest(BaseWicketTester.java:712)
at org.apache.wicket.util.tester.BaseWicketTester.processRequest(BaseWicketTester.java:651)
at org.apache.wicket.util.tester.BaseWicketTester.startPage(BaseWicketTester.java:876)
at org.apache.wicket.util.tester.BaseWicketTester.startPage(BaseWicketTester.java:893)
at nl.app.Page.testOverzicht(PageTest.java:67)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
at java.lang.reflect.Method.invoke(Method.java:611)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.mockito.internal.runners.JUnit45AndHigherRunnerImpl.run(JUnit45AndHigherRunnerImpl.java:37)
at org.mockito.runners.MockitoJUnitRunner.run(MockitoJUnitRunner.java:62)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
ERROR [RequestHandlerStack.detach()] Error detaching RequestHandler
java.lang.ClassCastException: nl.app.common.facade.Facade$$EnhancerByMockitoWithCGLIB$$7b6f60ae incompatible w
ith [Ljava.lang.Object;
at java.lang.ClassCastException.<init>(ClassCastException.java:58)
at org.apache.wicket.MarkupContainer.children_size(MarkupContainer.java:1305)
at org.apache.wicket.MarkupContainer.detachChildren(MarkupContainer.java:1603)
at org.apache.wicket.Component.detach(Component.java:1186)
at org.apache.wicket.core.request.handler.PageProvider.detach(PageProvider.java:327)
at org.apache.wicket.core.request.handler.RenderPageRequestHandler.detach(RenderPageRequestHandler.java:156)
at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.detach(RequestCycle.java:901)
at org.apache.wicket.request.RequestHandlerStack.detach(RequestHandlerStack.java:180)
at org.apache.wicket.request.cycle.RequestCycle.onDetach(RequestCycle.java:636)
at org.apache.wicket.request.cycle.RequestCycle.detach(RequestCycle.java:589)
at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:293)
at org.apache.wicket.util.tester.BaseWicketTester.processRequest(BaseWicketTester.java:712)
at org.apache.wicket.util.tester.BaseWicketTester.processRequest(BaseWicketTester.java:651)
at org.apache.wicket.util.tester.BaseWicketTester.startPage(BaseWicketTester.java:876)
at org.apache.wicket.util.tester.BaseWicketTester.startPage(BaseWicketTester.java:893)
at nl.app.Page.testOverzicht(PageTest.java:67)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
at java.lang.reflect.Method.invoke(Method.java:611)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.mockito.internal.runners.JUnit45AndHigherRunnerImpl.run(JUnit45AndHigherRunnerImpl.java:37)
at org.mockito.runners.MockitoJUnitRunner.run(MockitoJUnitRunner.java:62)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Интересно, как facadeMock пробирается детей странице. Не могли бы вы разместить точки останова в MarkupContainer $ ChildList, чтобы узнать, когда он будет добавлен? – svenmeier
Это не экземпляр ChildList, дочернее поле - это facadeMock. Я добавил точку останова почти везде, но я понятия не имею, откуда она взялась. – rbottel
Пожалуйста, создайте быстрый запуск, чтобы мы могли отладить проблему. – svenmeier