4

我在检票口应用程序中使用了以下面板,我想编写一个测试以确保调用 addPatternValidator(String pattern) 将 PatternValidator 添加到 TextField。

public class StringTextBoxPanel extends Panel {
  private static final long serialVersionUID = 1L;

  private String stringModel = new String();
  private TextField<String> textfield;
  private Label label;

  public StringTextBoxPanel(String id, String labelText) {
    super(id);
    label = new Label("label", labelText);
    textfield = new TextField<String>("textField", new PropertyModel<String>(this, "stringModel"));
    add(label);
    add(textfield);
  }

  public String getValue() {
    return textfield.getValue();
  }

  public void addPatternValidator(String pattern) {
    this.get(textfield.getId()).add(new PatternValidator(pattern));
  }

  public void setRequired() {
    textfield.setRequired(true);
  }
}

可以用 WicketTester 做到这一点吗?

4

2 回答 2

3

在 WicketTester 中启动 FormTester,将一些非法值“输入”到您的 TextField,让 FormTester 提交表单并

a) 检查模型,无效值不会写入模型

b) 检查错误信息

但说实话并提供我没有被要求的想法,我不太明白,为什么你要测试这个...... add 方法是 wicket 的一部分,不应该由你测试,而是由 Wicket 开发人员测试。这同样适用于 PatternValidator 类,但您可能想要测试您的模式。至于此方法中的其余代码……就我而言,这很简单,不能证明测试是合理的。

附录(正如评论中提到的,有更简单的方法可以确保调用一个方法而不是调用一个 FormTester。这个片段只是被侵入到这个编辑器中,所以没有应用任何 IDE 检查):

private Boolean methodCalled = false;

@Test
public void testSomething() {
    WicketTester tester = new WicketTester();
    tester.startComponentInPage(new StringTextBoxPanel("id", "someText") {

        @Override
        public void addPatternValidator(String pattern) {
            methodCalled = true;
        }
    });
    AssertTrue(methodCalled);
}
于 2012-08-02T07:24:01.847 回答
2

我在提交表单后检查了错误/信息消息:

wicketTester.assertHasNoErrorMessage();
wicketTester.assertHasNoInfoMessage();
wicketTester.getMessages(FeedbackMessage.FATAL); //or another kind of messages
于 2012-08-03T04:28:32.743 回答