Skip to content

Instantly share code, notes, and snippets.

@DD3Boh
Last active January 18, 2024 13:00
Show Gist options
  • Save DD3Boh/32ece85d63cbb243b3b428aa46178eb4 to your computer and use it in GitHub Desktop.
Save DD3Boh/32ece85d63cbb243b3b428aa46178eb4 to your computer and use it in GitHub Desktop.
Random Sweng stuff

Integration test error message

 private Label errorMessage;
  @Start
  public void start(Stage primaryStage) {

    Main m = new Main();
    m.start(primaryStage);

    GridPane gp = (GridPane) primaryStage.getScene().getRoot();
    ObservableList<Node> view = gp.getChildren();

    input = (InputAlimentView) view.get(0);
    command = new CommandView[2];
    for (int i = 0; i < 2; i++) {
      command[i] = (CommandView) view.get(i + 1);
    }
    display = (DisplayView) view.get(3);
    display2 = (DisplayView) view.get(4);

    errorMessage = FieldSupport.EXTRACTION.fieldValue("error", Label.class, input);

  }
  @Test
  void tError(FxRobot robot) {

    robot.doubleClickOn(input.num);
    robot.write("6");
    robot.press(KeyCode.ENTER);
    robot.release(KeyCode.ENTER);
    robot.clickOn(input.addButton);

    assertThat(errorMessage.getText()).startsWith("empty name name");
  }

Per funzionare, il presenter deve essere collegato. Il test di integrazione semplicemente simula un user input nel programma JavaFX

Observers

public interface Observable<T> {
    T getState1();
    T getState2();
    void addObserver(Observer<T> obs);

    void notifyObservers();
}
public interface Observer<T> {
    void update(Observable<T> subj);
}

Model:

implements Observable<List<ItemQuantity>>

private final List<Observer<List<ItemQuantity>>> observers = new ArrayList<>();

    @Override
    public List<ItemQuantity> getState1() {
        return getToBuyList();
    }

    @Override
    public List<ItemQuantity> getState2() {
        return null;
    }
 
    @Override
    public void addObserver(Observer<List<ItemQuantity>> obs) {
        observers.add(obs);
    }

    @Override
    public void notifyObservers() {
        for (Observer<List<ItemQuantity>> observer : observers) {
            observer.update(this);
        }
    }

Presenter

implements Observer<List<Postazione>>

in constructor:

model.addObserver(this);
this.view = view;

implement update

Unit testing

Assert thrown by

        assertThatThrownBy(() -> SUT.addItem(new ItemQuantity("basta",3)))
        .isInstanceOf(IllegalArgumentException.class)
                .hasMessage("too many items");

Assert contains exactly

        assertThat(SUT.getToBuyList())
                .containsExactly(new ItemQuantity("mele",7));

Mock example

        var view = mock(InputView.class);
        var model = mock(ModelBase.class);

Parametrized test

    @ParameterizedTest
    @CsvSource(textBlock= """
            '',3,empty item name
            mele,aa, not a number
            mele, -3, negative number
            """)
    void testErrorAction(String item, String qty, String error) {
        var view = mock(InputView.class);
        var model = mock(ModelBase.class);
        var SUT = new InputAlimentPresenter(view, model);
        SUT.action(item, qty);
        verify(view)
                .showError(error);
    }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment