单元测试:允许误报或带来重复
Unit testing: allow for false-positive or bring duplication
我正在测试一个 class,它(除了与其他人交互之外)创建一个对象,该对象的字段由调用者传递的常量和值组成:
private String createService(Long organizationId, String prototypeId,
MedicalService medicalService)
{
ServiceType service = new ServiceType();
service.setClinic(organizationId.toString());
service.setType("0");
service.setPrototype(prototypeId);
service.setCode(medicalService.getCode());
service.setName(medicalService.getName());
service.setIndependent(true);
service.setRepeated(false);
return remoteWS.createService(service);
}
我应该测试每个字段是否设置正确吗?
我怀疑的原因是它会引入重复并降低可读性。特别是我倾向于做反射断言。
这只能检测到一些 "stupid" 打字错误,例如如果两者都是 String
.
类型,则将 code
写入 name
字段
这种重复合理吗?
解决此问题的一种方法:如果您有 "data" 以某种方式属于 "together",那么该数据值得 拥有 class .
对于这种情况,您将使用 scala 所称的 value class for scala, or what kotlin provides as data class。换句话说:一个只存在于环绕 "set" 个值的容器。
那里的核心方面:例如,您为 equals()
方法提供了合理的实现(考虑 Java 术语时)。换句话说:您启用 dataObjectA.equals(dataObjectB)
之类的比较,后者又会比较 class.
的 all 字段
然后您通过在单元测试中创建该数据的此类实例 class 来利用它,并携带所有预期值。
这是否值得努力的问题不是别人可以告诉你的。你必须评估 A) 在那个角落出错的可能性 B) 这种错误的成本。
从 TDD 的角度来看,您 甚至会 测试这样的细节。
个人想法:有时候还是要务实一点。仅 "records" 生产代码正在执行的单元测试在我看来并没有太大帮助。尽管如此,有时除了这样写下来别无他法。从这个意义上说:我会建议测试这些细节,但是我会退一步设计一个解决方案,使编写相应的测试尽可能简单直接。
换句话说:我会测试这些东西,但要确保我可以用最少的努力做到。
我正在测试一个 class,它(除了与其他人交互之外)创建一个对象,该对象的字段由调用者传递的常量和值组成:
private String createService(Long organizationId, String prototypeId,
MedicalService medicalService)
{
ServiceType service = new ServiceType();
service.setClinic(organizationId.toString());
service.setType("0");
service.setPrototype(prototypeId);
service.setCode(medicalService.getCode());
service.setName(medicalService.getName());
service.setIndependent(true);
service.setRepeated(false);
return remoteWS.createService(service);
}
我应该测试每个字段是否设置正确吗?
我怀疑的原因是它会引入重复并降低可读性。特别是我倾向于做反射断言。
这只能检测到一些 "stupid" 打字错误,例如如果两者都是 String
.
code
写入 name
字段
这种重复合理吗?
解决此问题的一种方法:如果您有 "data" 以某种方式属于 "together",那么该数据值得 拥有 class .
对于这种情况,您将使用 scala 所称的 value class for scala, or what kotlin provides as data class。换句话说:一个只存在于环绕 "set" 个值的容器。
那里的核心方面:例如,您为 equals()
方法提供了合理的实现(考虑 Java 术语时)。换句话说:您启用 dataObjectA.equals(dataObjectB)
之类的比较,后者又会比较 class.
然后您通过在单元测试中创建该数据的此类实例 class 来利用它,并携带所有预期值。
这是否值得努力的问题不是别人可以告诉你的。你必须评估 A) 在那个角落出错的可能性 B) 这种错误的成本。
从 TDD 的角度来看,您 甚至会 测试这样的细节。
个人想法:有时候还是要务实一点。仅 "records" 生产代码正在执行的单元测试在我看来并没有太大帮助。尽管如此,有时除了这样写下来别无他法。从这个意义上说:我会建议测试这些细节,但是我会退一步设计一个解决方案,使编写相应的测试尽可能简单直接。
换句话说:我会测试这些东西,但要确保我可以用最少的努力做到。