Eclipse Scout:form.doOk()不调用ModifyHandlerexecStore()

Eclipse Scout:form.doOk()不调用ModifyHandlerexecStore(),eclipse,eclipse-scout,Eclipse,Eclipse Scout,我正在尝试为我的Eclipse Scout应用程序编写集成测试 我的测试方法如下所示: AForm form = new AForm(); form.setPersonId(3L); form.startNew(); form.doOk(); //assertions on the form. AForm form = new AForm(); form.setPersonId(3L); form.startNew(); Assert.assertEquals("isSaveNeeded [1

我正在尝试为我的Eclipse Scout应用程序编写集成测试

我的测试方法如下所示:

AForm form = new AForm();
form.setPersonId(3L);
form.startNew();
form.doOk();
//assertions on the form.
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.
我的问题是没有执行ModifyHandler所在的AForm.ModifyHandlerexecStore中的代码。为了确保这一点,我修改了实现:我抛出了一个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?

您遇到了一个问题

仅当表单中至少有一个值发生了更改时,Eclipse Scout才会执行execStore

准确地说:

AbstractFormHandlerexecLoad期间设置的值被视为初始值 AbstractFormHandlerexecPostLoad期间设置的值被视为修改后的值。 当用户与表单交互时,他在PostLoad事件之后

要将表单标记为已修改,可以使用IFormtouch

您可以将单元测试更改为以下内容:

AForm form = new AForm();
form.setPersonId(3L);
form.startNew();
form.doOk();
//assertions on the form.
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.
断言是不必要的。他们在这里只是为了说明情况

如果iFormisSaveeded返回true,则将执行execStore实现