execChangedMasterValue 的 Eclipse Scout Neon 单元测试

Eclipse Scout Neon unit test of execChangedMasterValue

我有两个字段是主从关系:

public class Slave extends AbstractListBox<String> {

  @Override
  protected Class<? extends IValueField> getConfiguredMasterField() {

    return Master.class;
  }

  @Override
  protected void execChangedMasterValue(final Object newMasterValue) {
    this.function() // -> here I put debugging break point
  }
}

public class Master extends AbstractBooleanField {

  @Override
  protected void execChangedValue() {

    super.execChangedValue(); // -> Break point 2 
  }
}

我为这个关系写了单元测试,但是单元测试内部 execChangedMasterValue 从来没有被调用过。

我的单元测试看起来像:

@Test
public void test() {

    this.box.getMaster.setValue(true)
    Assert.assertFalse(... something from function Slave ...)
}

单元测试总是失败,如果我如上所述放置断点,调试器只会在第二个断点处停止,而不会在第一个断点处停止。

在 "real" 世界中,函数被调用,一切正常。

没有调用execChangedMasterValue有什么原因吗? execChangedMasterValue 的行为与 changedValue() 不同吗?

我无法重现您所描述的内容。我使用了 Scout HelloWorld 项目(创建新项目时生成的项目)。

HelloWorldForm 中,我在 MainBox 中添加了这个 "slave" 字段:

@Order(2000)
public class LengthField extends AbstractIntegerField {
    @Override
    protected String getConfiguredLabel() {
        return TEXTS.get("Length");
    }

    @Override
    protected Class<? extends IValueField<?>> getConfiguredMasterField() {
        return MessageField.class;
    }

    @Override
    protected void execChangedMasterValue(Object newMasterValue) {
        if(newMasterValue instanceof String) {
            String s = (String) newMasterValue;
            setValue(s.length());
        } else {
            setValue(0);
        }
    }
}

并且在示例单元测试 HelloWorldFormTest 中,我向 testMessageCorrectlyImported() 添加了额外的检查:

/**
 * Tests that the {@link MessageField} is correctly filled after start.
 */
@Test
public void testMessageCorrectlyImported() {
    HelloWorldForm frm = new HelloWorldForm();
    frm.start();

    Assert.assertEquals("Message field", MESSAGE_VALUE, frm.getMessageField().getValue());
    Assert.assertEquals("Length field", Integer.valueOf(MESSAGE_VALUE.length()) , frm.getLengthField().getValue());

    frm.getMessageField().setValue("abcdef");
    Assert.assertEquals("Length field (after update)", Integer.valueOf("abcdef".length()), frm.getLengthField().getValue());
}

一切都按预期进行……