在我的Wicket应用程序中,我使用了一个带有"是"和"否"选项的单选按钮.如果我选择"否",我应该显示一个下拉选项.我用的是代码AjaxFormChoiceComponentUpdatingBehavior.如何使用WicketTester进行单元测试?
我想检查给定组件是否有CSS类集.为此,我想获得该特定组件的HTML输出.
WicketTester可以为整个呈现的页面提供HTML输出.获得Component的HTML/String输出的最佳方法是什么?
我正在为Wicket WebPage编写单元测试.我想启动一个页面,键入一个字段,单击一个链接,然后进行一些断言.
查看WicketTester和BaseWicketTester的API ,我找不到任何采用路径(如"form:input")来定位输入字段并允许您在其中输入文本的方法.
// set up WicketTester; create page
tester.startPage(page);
tester. // Type into input field - how to do this?
tester.clickLink("form:continueButton");
// assert something
Run Code Online (Sandbox Code Playgroud)
我错过了什么?这似乎是一个非常基本的用例.你不应该像这样使用WicketTester吗?(鉴于存在类似clickLink()的方法,这将是令人惊讶的.)
我正在尝试使用Wicket Page Test来测试我的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.eclipse.jetty.security.authentication.BasicAuthenticator@4c451268 in org.eclipse.jetty.security.ConstraintSecurityHandler@4abb90f6
Run Code Online (Sandbox Code Playgroud)
我的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>
Run Code Online (Sandbox Code Playgroud)
测试类看起来像这样:
@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) …Run Code Online (Sandbox Code Playgroud) 我有几个wicket测试,它们针对可排序的DataTable,特别是ajax-单击可排序的列标题并断言渲染的主体行的内容.现在,表组件的后代的组件层次结构由wicket框架自动生成,并导致排序链接(ajax)的路径类似于:
table:topToolbars:toolbars:0:headers:1:header:orderByLink
Run Code Online (Sandbox Code Playgroud)
但是,当DataTable跨测试重新呈现时,工具栏组件的索引每次都会递增,即类似于:
table:topToolbars:toolbars:1:headers:1:header:orderByLink
Run Code Online (Sandbox Code Playgroud)
然后打破后续测试的硬编码路径,因为它们将不再匹配.
数据表构造的代码片段如下:
final PayeesProvider dataProvider = new PayeesProvider();
table = new DataTable<ResponsePayeeDetails>("payees", columns, dataProvider, rowsPerPage);
table.setOutputMarkupId(true);
table.addTopToolbar(new AjaxFallbackHeadersToolbar(table, dataProvider) {
private static final long serialVersionUID = -3509487788284410429L;
@Override
protected WebMarkupContainer newSortableHeader(final String borderId, final String property, final ISortStateLocator locator) {
return new AjaxFallbackOrderByBorder(borderId, property, locator, getAjaxCallDecorator()) {
@Override
protected void onRender() {
System.out.printf("Path: %s\n", this.getPageRelativePath());
super.onRender();
}
private static final long serialVersionUID = -6399737639959498915L;
@Override
protected void onAjaxClick(final AjaxRequestTarget target) {
target.add(getTable(), navigator, navigatorInfoContainer);
}
@Override …Run Code Online (Sandbox Code Playgroud) 鉴于这个非常简单的Wicket组件:
public class ProductImage extends WebComponent {
public ProductImage(String id, Product p) {
super(id, new Model(p));
add(new AttributeModifier("src", true, new Model(p.getImage())));
}
}
Run Code Online (Sandbox Code Playgroud)
如何使用WicketTester进行单元测试?我需要一个页面吗?
wicket ×6
java ×5
unit-testing ×2
components ×1
datatable ×1
html ×1
jetty ×1
testng ×1
wicket-6 ×1