Java Wicket页面测试,Jetty安全配置
我正在尝试使用wicket页面测试来测试我的wicket项目 启动测试会导致Jetty抛出以下错误:Java Wicket页面测试,Jetty安全配置,java,jetty,wicket,testng,wicket-tester,Java,Jetty,Wicket,Testng,Wicket Tester,我正在尝试使用wicket页面测试来测试我的wicket项目 启动测试会导致Jetty抛出以下错误: 2015-03-24 17:46:24,789 WARN [:] [main] [] [||] - org.eclipse.jetty.webapp.WebAppContext - Failed startup of context o.e.j.w.WebAppContext java.lang.IllegalStateException: No LoginService for org.ec
2015-03-24 17:46:24,789 WARN [:] [main] [] [||] - org.eclipse.jetty.webapp.WebAppContext - Failed startup of context o.e.j.w.WebAppContext
java.lang.IllegalStateException: No LoginService for org.eclipse.jetty.security.authentication.BasicAuthenticator@4c451268 in org.eclipse.jetty.security.ConstraintSecurityHandler@4abb90f6
我的testng套件如下所示:
<suite name="wicket-page-test-sample">
<test verbose="2" name="tests" annotations="JDK">
<packages>
<package name="..."></package>
</packages>
<classes>
<class name="com.ttdev.wicketpagetest.WebPageTestContext"></class>
<class name="nl.pack.test.MessagePanelTest"></class>
</classes>
</test>
@Test
public class MessagePanelTest
{
public void testOpenComponent()
{
final StringBuffer log = new StringBuffer();
MockableSpringBeanInjector.mockBean("hibernateService", mock(HibernateService.class));
WicketSeleniumDriver ws = WebPageTestContext.getWicketSelenium();
ws.openComponent(new ComponentFactory()
{
private static final long serialVersionUID = 1L;
public Component createComponent(String id)
{
return new MessagePanel(mock(AjaxRequestTarget.class));
}
});
assert ws.getText(By.id("info")).equals("Hello");
}
}
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Get name="securityHandler">
<Set name="loginService">
<New class="org.eclipse.jetty.security.HashLoginService">
<Set name="name">MySecurityRealm</Set>
<Set name="config">src/test/resources/jetty-realm.properties</Set>
<Call name="start"/>
</New>
</Set>
<Set name="checkWelcomeFiles">true</Set>
</Get>
</Configure>
我在网上找到了一些关于改变码头配置的建议,如下所示:
<suite name="wicket-page-test-sample">
<test verbose="2" name="tests" annotations="JDK">
<packages>
<package name="..."></package>
</packages>
<classes>
<class name="com.ttdev.wicketpagetest.WebPageTestContext"></class>
<class name="nl.pack.test.MessagePanelTest"></class>
</classes>
</test>
@Test
public class MessagePanelTest
{
public void testOpenComponent()
{
final StringBuffer log = new StringBuffer();
MockableSpringBeanInjector.mockBean("hibernateService", mock(HibernateService.class));
WicketSeleniumDriver ws = WebPageTestContext.getWicketSelenium();
ws.openComponent(new ComponentFactory()
{
private static final long serialVersionUID = 1L;
public Component createComponent(String id)
{
return new MessagePanel(mock(AjaxRequestTarget.class));
}
});
assert ws.getText(By.id("info")).equals("Hello");
}
}
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Get name="securityHandler">
<Set name="loginService">
<New class="org.eclipse.jetty.security.HashLoginService">
<Set name="name">MySecurityRealm</Set>
<Set name="config">src/test/resources/jetty-realm.properties</Set>
<Call name="start"/>
</New>
</Set>
<Set name="checkWelcomeFiles">true</Set>
</Get>
</Configure>
MySecurityRealm
src/test/resources/jetty-realm.properties
真的
但我现在不知道如何在测试中包括此配置。我错过了什么?我应该如何为我的测试配置jetty?我不是java专业人士,但我搜索了你的问题,找到了一些有用的链接你能提供一些关于web.xml结构的更多信息吗?主要问题显然是jetty找不到登录配置的loginService。使用嵌入式jetty,您通常可以通过“server.addBean(loginService);”添加此服务-但是wicket tester不允许对如何启动jetty server ETC进行大量定制。请不要只删除链接,而是将一些相关信息添加到答案中,因为链接往往会断开。这些链接指向过期或不可用的信息。答案中没有上下文,因此很难使用链接。