【问题标题】:Eclipse Scout Neon unit test of execChangedMasterValueexecChangedMasterValue 的 Eclipse Scout Neon 单元测试
【发布时间】:2016-09-22 15:07:06
【问题描述】:

我有两个与主从关系相关的字段:

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 ...)
}

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

在“真实”世界中,函数被调用,一切都按原样运行。

execChangedMasterValue 没有被调用是有原因的吗? execChangedMasterValue 的行为是否与 changedValue() 不同?

【问题讨论】:

    标签: eclipse-scout


    【解决方案1】:

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

    HelloWorldForm我已经在MainBox中添加了这个“从属”字段:

    @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());
    }
    

    一切都按预期进行……

    【讨论】:

    • 是的,上面的例子有效,但是如果你在单元测试中的 MassageField 上 setValue() 怎么办?例如 HelloWorldForm frm = new HelloWorldForm(); frm.getMessageField.setValue("我的消息")...
    • 我已经更新了测试,它在我的工作区中始终是绿色的。也许您没有在测试用例中启动表单?
    猜你喜欢
    • 2016-07-17
    • 2016-09-28
    • 2016-06-29
    • 2016-04-24
    • 2016-10-09
    • 2016-10-03
    • 1970-01-01
    • 2016-07-08
    • 2016-06-29
    相关资源
    最近更新 更多