Eclipse Scout: form.doOk() не вызывает ModifyHandler#execStore()

Я пытаюсь написать интеграционные тесты для своего приложения Eclipse Scout.

Мой метод тестов выглядит так:

AForm form = new AForm();
form.setPersonId(3L);
form.startNew();
form.doOk();
//assertions on the form.

Моя проблема в том, что код в AForm.ModifyHandler#execStore() ModifyHandler не выполняется. Чтобы убедиться в этом, я изменил реализацию: я выбрасываю исключение IllegalStateException:

public class ModifyHandler extends AbstractFormHandler {

  @Override
  protected void execLoad() throws ProcessingException {
    IAService service = SERVICES.getService(IAService.class);
    AFormData formData = new AFormData();
    exportFormData(formData);
    formData = service.load(formData);
    importFormData(formData);
    setEnabledPermission(new UpdateAPermission());

  }

  @Override
  protected void execStore() throws ProcessingException {
    throw new IllegalStateException("Exception for Unit Test: execStore()");
    // IAService service = SERVICES.getService(IAService.class);
    // AFormData formData = new AFormData();
    // exportFormData(formData);
    // formData = service.store(formData);
  }
}

Почему execStore() не вызывается?


person Community    schedule 10.07.2014    source источник


Ответы (1)


У вас возникла жизненный цикл формы.

Eclipse Scout выполняет execStore() только в том случае, если в форме изменилось хотя бы одно значение.

Точнее:

  • значения, установленные во время AbstractFormHandler#execLoad(), считаются начальными значениями
  • значения, установленные во время AbstractFormHandler#execPostLoad(), считаются измененными значениями.

Когда пользователь взаимодействует с формой, он находится после события PostLoad.

Чтобы пометить форму как измененную, вы можете использовать IForm#touch().

Вы можете изменить свой модульный тест на что-то вроде этого:

AForm form = new AForm();
form.setPersonId(3L);
form.startNew();
Assert.assertEquals("isSaveNeeded [1]", false, form.isSaveNeeded());
form.touch(); // or form.getXyField().setValue(..);
Assert.assertEquals("isSaveNeeded [2]", true, form.isSaveNeeded());
form.doOk();
//assertions on the form.

Утверждения "необходимо сохранить" не нужны. Они здесь только для иллюстрации дела.

Если IForm#isSaveNeeded() возвращает true, ваша реализация execStore() будет выполнена.

person Jmini    schedule 10.07.2014