我有两个与主从关系相关的字段:
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 ...)
}
单元测试总是失败,如果我按上述方法设置断点,调试器仅在第二个断点处停止,但从不在第一个断点处停止。
真实&#34;世界,函数被调用,一切都按预期工作。
是否有理由不调用execChangedMasterValue
? execChangedMasterValue
的行为是否与changedValue()
不同?
答案 0 :(得分: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());
}
一切都按预期工作......