代码之家  ›  专栏  ›  技术社区  ›  Marko Zadravec

execChangedMasterValue的Eclipse Scout Neon单元测试

  •  0
  • Marko Zadravec  · 技术社区  · 9 年前

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

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

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

    在“现实”世界中,函数是被调用的,一切都正常工作。

    有什么原因 执行更改的主值 没有被调用?行为是否 执行更改的主值 不同于 changedValue() ?

    1 回复  |  直到 9 年前
        1
  •  1
  •   Jmini Peter Kriens    9 年前

    我无法复制你所描述的。我参加了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());
    }
    

    一切按预期运行