Okay,
Got my test green :-)
Here it is:
package be.thomascook.ui.pages.admin;
import be.thomascook.wicket.component.WicketFilter;
import org.apache.wicket.spring.injection.annot.SpringComponentInjector;
import org.apache.wicket.util.tester.WicketTester;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import
org.springframework.test.context.testng.AbstractTransactionalTestNGSpringContextTests;
import org.springframework.transaction.annotation.Transactional;
import org.testng.annotations.Test;
/**
* @author Compi
* @since 10-mei-2010
*/
@ContextConfiguration(locations = {
"/applicationContext-dao.xml",
"/applicationContext-service.xml",
"/applicationContext-database.xml"})
@Transactional
public class UserListPageTest extends
AbstractTransactionalTestNGSpringContextTests {
@Autowired
private ApplicationContext applicationContext;
@Autowired
protected WicketFilter wicketApplication;
@Test
public void labelContainsHelloWorld() {
WicketTester tester=new WicketTester();
tester.getApplication().addComponentInstantiationListener(new
SpringComponentInjector(tester.getApplication(), applicationContext, true ));
tester.startPage(UserListPage.class);
tester.assertNoErrorMessage();
tester.assertLabel("title", "Users List");
}
}
Kind regards,
Kim
-----Original Message-----
From: Lauwers, Kim [mailto:[email protected]]
Sent: maandag 10 mei 2010 14:00
To: [email protected]
Subject: Wicket + Spring + WicketTester:
org.apache.wicket.WicketRuntimeException: There is no application attached to
current thread main
Hello everybody,
I'm having problems with testing my wicket application with WicketTester
I get this error:
org.apache.wicket.WicketRuntimeException: There is no application attached to
current thread main
รจ See below for fulle stacktrace.
I have been looking everywhere on the net, and I can't seem to get it working L
I have following WEB.XML
[WEB.XML]
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<servlet>
<servlet-name>SLF4J helper</servlet-name>
<servlet-class>be.thomascook.SLF4JHelperServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<filter>
<filter-name>opensessioninview</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>opensessioninview</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>Jersey Spring Web Application</servlet-name>
<servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.JSPTemplatesBasePath</param-name>
<param-value>/WEB-INF/jsp</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Spring Web Application</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<filter>
<filter-name>wicket-spring</filter-name>
<filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
<init-param>
<param-name>applicationFactoryClassName</param-name>
<param-value>org.apache.wicket.spring.SpringWebApplicationFactory</param-value>
</init-param>
<init-param>
<param-name>applicationBean</param-name>
<param-value>wicketApplication</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>wicket-spring</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
[/WEB.XML]
My WebApplication
In the init method we weave spring to our wicket
[APP]
public class WicketFilter extends WebApplication {
/**
* Constructor.
*/
public WicketFilter() {
}
@Override
protected void init() {
addComponentInstantiationListener(new SpringComponentInjector(this));
}
public Class getHomePage() {
return UserListPage.class;
}
}
[/APP]
My userListPage
With the @SpringBean we inject a spring bean which is defined in our
applicationContext.
[PAGE]
public class UserListPage extends TemplatePage {
@SpringBean(name = "userservice")
private GenericCRUDService<User, Long> service;
public UserListPage() {
setPageTitle("Users List");
this.add(new CRUDPanel<User, Long>("userlist", service, "username",
"firstName", "lastName", "email", "enabled") {
@Override
protected void onEdit(IModel<User> rowModel) {
UserPage page = new UserPage(rowModel);
setResponsePage(page);
}
});
}
}
[/PAGE]
And finally my test which fails
[TEST]
@ContextConfiguration(locations = {
"/applicationContext-dao.xml",
"/applicationContext-service.xml",
"/applicationContext-database.xml"})
public class UserListPageTest extends AbstractTestNGSpringContextTests {
@Autowired
private ApplicationContext applicationContext;
@Autowired
protected WicketFilter wicketApplication;
@Test
public void labelContainsHelloWorld() {
wicketApplication.addComponentInstantiationListener(new
SpringComponentInjector(wicketApplication, applicationContext, true));
WicketTester tester = new WicketTester(wicketApplication);
tester.startPage(UserListPage.class);
tester.assertNoErrorMessage();
tester.assertLabel("title", "Roles List");
}
}
[/TEST]
[EXCEPTION]
org.apache.wicket.WicketRuntimeException: There is no application attached to
current thread main
at org.apache.wicket.Application.get(Application.java:179)
at
org.apache.wicket.injection.web.InjectorHolder.setInjector(InjectorHolder.java:88)
at
org.apache.wicket.spring.injection.annot.SpringComponentInjector.<init>(SpringComponentInjector.java:104)
at
be.thomascook.ui.pages.admin.UserListPageTest.labelContainsHelloWorld(UserListPageTest.java:46)
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.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:644)
at
org.testng.internal.MethodHelper$1.runTestMethod(MethodHelper.java:762)
at
org.springframework.test.context.testng.AbstractTestNGSpringContextTests.run(AbstractTestNGSpringContextTests.java:158)
Process finished with exit code 0
[/EXCEPTION]
Thanks in advance.
Kim
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]