我参加了一个单元测试,找到了一个在两个类之间进行映射的方法。
@Test
public void testMapping() {
MappingClass mappingClass = new MappingClass();
FromClass fromClass = new FromClass("string.value");
ToClass toClass = mappingClass.map(fromClass);
//This...
assertEquals(fromClass.getStringValue(), toClass.getMappedStringValue());
//... or this?
assertEquals("string.value", toClass.getMappedStringValue());
}
getter巧合地包含相同的字符串值,我相信代码是这样编写的,因为编写器知道map方法会调用getter。正是由于这个原因,我期望绝对值,因为从TDD的角度来看,你应该不知道实现。
单位测试评估主题的绝对值而不是评估派生值有什么好处?
编辑:为避免混淆,实施方式如下:
public class FromClass {
private String stringValue;
public FromClass(String stringValue) {
this.stringValue = stringValue;
}
public String getStringValue() {
return stringValue;
}
}
public class ToClass {
private String mappedStringValue;
public ToClass(String mappedStringValue) {
this.mappedStringValue = mappedStringValue;
}
public String getMappedStringValue(){
return mappedStringValue;
}
}
public class MappingClass {
public ToClass map(FromClass fromClass){
return new ToClass(fromClass.getStringValue());
}
}
答案 0 :(得分:1)
在这种情况下我会这样做
String expected="string.value"
;并使用它两次(实际一次,预期一次)我认为它表明意图很好。它表明重用价值不是偶然的,而是预期的。
另外,我认为如果写成
,测试会更具可读性@Test public void testMapping() { MappingClass sut= new MappingClass(); //sut=system under test FromClass fromClass = new FromClass("string.value"); ToClass actual= mappingClass.map(fromClass); ToClass expected = //construct new object assertEquals(expected, actual);
这要求在equals
对象中执行正确的ToClass
。 In此解决方案是针对更改的bullet-prof(ToClass
中的新字段)。
为了确保您的equals
实现能够防范ToClass
中的更改,您可以为equals / hashcode编写另一个测试。如果向ToClass
添加新字段,请使用https://github.com/jqno/equalsverifier -your equals test将失败。
值对象(如FromClass, ToClass
)中的Equals / hashcode / toString实现是个好主意 - 它使这些类更强大(它们可以是Map中的键,Set中的元素等)并且使用起来很愉快。 / p>