我有一个运行良好的测试类,当我运行整个软件包时,它会运行。但是,当我运行整个项目时,它在20个测试中失败了4个。
我正在使用Eclipse Juno SR1来运行测试,而我正在使用EasyMock 3.2。 (PowerMock也在项目设置中,但它仅用于模拟外部依赖项的两个测试中。)该项目使用Wicket 6.18在Java 7中。
我确定您需要更多信息,但我不知道从哪里开始,所以,如果您需要了解其他任何内容,请发表评论,我会(尝试)添加它。
以下是其中一个的失败消息:
junit.framework.AssertionFailedError: Missing expected feedback message: The value of 'percentage' must be between 0 and 100.
其他三个的失败消息也与缺少反馈消息有关。行为是确定性的。同一个测试类中的四个测试用例总是相同,但总是会出现相同的“缺少预期反馈”消息。
以下是其中一个测试用例:
@Test
public void testPercentageTooLarge() {
UserApplication u = new UserApplication();
setUser(u);
IEditIntervalDTOFrontEnd mockModel = createStrictMock(IEditIntervalDTOFrontEnd.class);
expect(mockModel.getLowerBound()).andReturn(BigDecimal.ZERO);
expect(mockModel.getUpperBound()).andReturn(BigDecimal.ZERO);
expect(mockModel.isLast()).andReturn(false);
expect(mockModel.getLowerLimit()).andReturn(BigDecimal.ZERO);
expect(mockModel.getUpperLimit()).andReturn(BigDecimal.ZERO);
expect(mockModel.getPercentage()).andReturn(new BigDecimal("3"));
replayAll();
EditIntervalPanel p = new EditIntervalPanel("test", new Model<IEditIntervalDTOFrontEnd>(mockModel));
startTest(p, false);
replay(getTarget());
@SuppressWarnings("unchecked")
TextField<BigDecimal> t = (TextField<BigDecimal>)getTester().getComponentFromLastRenderedPage(p.getPageRelativePath() + ":form:percentageContainer:percentage");
getTester().getRequest().getPostParameters().setParameterValue(t.getInputName(), "500");
getTester().executeAjaxEvent(t.getPageRelativePath(), "onchange");
verifyAll();
getTester().assertComponentOnAjaxResponse(p.getPageRelativePath() + ":form:errorPanel");
getTester().assertComponent(p.getPageRelativePath() + ":form:errorPanel", BootstrapFeedbackPanel.class);
getTester().assertFeedback(p.getPageRelativePath() + ":form:errorPanel", "The value of 'percentage' must be between 0 and 100.");
}
其他三个是相似的。它们将无效值注入请求参数,然后调用AJAX onchange
事件。
以下是正在测试的组件:
TextField<BigDecimal> percentage = new TextField<BigDecimal>("percentage", new PropertyModel<BigDecimal>(getModel(), "percentage"));
percentage.setRequired(true);
percentage.add(new RangeValidator<BigDecimal>(BigDecimal.ZERO, new BigDecimal(100)));
form.add(new WebMarkupContainer("percentageContainer").add(percentage));
percentage.add(new AjaxFormComponentUpdatingBehavior("onChange") {
private static final long serialVersionUID = 1L;
@Override
protected void onUpdate(AjaxRequestTarget target) {
try {
if (!getModelObject().isNew()) {
getModelObject().execAndSync(((TemplatePage)getPage()).getLoggedInUser());
notifyChanged(target);
}
} catch (DTOFrontEndException e) {
logger.error(e.getMessage(), e);
throw new WicketRuntimeException(e.getMessage(), e);
}
target.add(errorPanel);
}
@Override
protected void onError(AjaxRequestTarget target, RuntimeException e) {
target.add(errorPanel);
}
});
这是被模拟的界面,如果有帮助,出于某种原因:
public interface IEditIntervalDTOFrontEnd extends IDTOFrontEnd {
BigDecimal getLowerBound();
BigDecimal getLowerLimit();
BigDecimal getUpperLimit();
BigDecimal getUpperBound();
BigDecimal getPercentage();
boolean isLast();
boolean isNew();
void setUpperLimit(BigDecimal value);
void setPercentage(BigDecimal value);
boolean isWellOrdered();
void reorder(IEditIntervalDTOFrontEnd prev, IEditIntervalDTOFrontEnd next);
boolean isChanged();
}
答案 0 :(得分:1)
我没有看到任何错误。尝试转储最后一个响应:System.err.println(“=== DEBUG ==== \ n \ n”+ getTester.getLastResponse()。getDocument());.检查TextField的值是什么以及为FeedbackPanel生成的内容是什么。