4 Stimmen

Verwenden von WicketTester, um zu überprüfen, ob ein Validator zu einem TextField hinzugefügt wird?

Ich habe das folgende Panel, das ich in meiner Wicket-Anwendung verwende, und ich möchte einen Test schreiben, um sicherzustellen, dass das Aufrufen von addPatternValidator(String pattern) einen PatternValidator zum TextField hinzufügt.

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

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

  public StringTextBoxPanel(String id, String labelText) {
    super(id);
    label = new Label("label", labelText);
    textfield = new TextField("textField", new PropertyModel(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);
  }
}

Ist es möglich, das mit WicketTester zu tun?

3voto

Nicktar Punkte 5433

Starten Sie einen FormTester in WicketTester, geben Sie Ihrem TextField "input" einen ungültigen Wert ein, lassen Sie den FormTester das Formular senden und

a) überprüfen Sie das Modell, ungültige Werte werden nicht im Modell gespeichert

b) überprüfen Sie Fehlermeldungen

Aber um ehrlich zu sein und meine unbeantworteten Gedanken anzubieten, verstehe ich nicht ganz, warum Sie dies testen möchten ... Die add-Methode gehört zu Wicket und sollte nicht von Ihnen, sondern von den Wicket-Entwicklern getestet werden. Das gilt auch für die PatternValidator-Klasse, obwohl Sie Ihr Muster testen möchten. Was den Rest des Codes in dieser Methode betrifft ... Es ist trivial und würde meiner Meinung nach keinen Test rechtfertigen.

Anhang (wie in dem Kommentar erwähnt, gibt es einfachere Möglichkeiten sicherzustellen, dass eine Methode aufgerufen wurde, als einen FormTester zu verwenden. Dieser Code wurde einfach in diesen Editor gehackt, daher wurden keinerlei IDE-Prüfungen durchgeführt):

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);
}

2voto

Grigorichev Denis Punkte 199

Ich habe nach Fehler-/Infomeldungen nach dem Absenden des Formulars überprüft:

wicketTester.assertHasNoErrorMessage();
wicketTester.assertHasNoInfoMessage();
wicketTester.getMessages(FeedbackMessage.FATAL); //oder eine andere Art von Meldungen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X