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
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
assertThatThrownBy(() -> SUT.addItem(new ItemQuantity("basta",3)))
.isInstanceOf(IllegalArgumentException.class)
.hasMessage("too many items");
assertThat(SUT.getToBuyList())
.containsExactly(new ItemQuantity("mele",7));
var view = mock(InputView.class);
var model = mock(ModelBase.class);
@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);
}