1

我正在尝试为我的 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()不叫?

4

1 回答 1

0

您有一个表单生命周期问题。

Eclipse ScoutexecStore()仅在表单中至少有一个值发生更改时才会执行。

准确地说:

  • 期间设置的值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()实现将被执行。

于 2014-07-10T14:42:43.780 回答