单元测试:允许误报或带来重复

时间:2017-07-10 06:40:29

标签: unit-testing testing tdd

我正在测试一个类(除了与其他人交互之外)创建一个对象,其中包含由调用者传递的常量和值组成的字段:

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

我应该测试每个字段是否设置得当?

我怀疑的原因是它会引入重复并降低可读性。特别是我倾向于做反思断言。

这只会让我发现一些"愚蠢的"输入错误,例如如果两者都属于code类型,请将name写入String字段。

这种重复是否合理?

1 个答案:

答案 0 :(得分:2)

解决这个问题的一种方法:如果你有"数据"属于"在一起"不知何故,那些数据值得拥有类。

对于这种情况,scala会将value class称为scala,或者kotlin将其称为data class。换句话说:一个只存在于一个" set"价值观。

核心方面:例如,为equals()方法提供合理的实现(在考虑Java术语时)。换句话说:您启用比较dataObjectA.equals(dataObjectB)的比较,后者反过来比较该类的所有字段。

然后你通过在单元测试中创建该数据类的这样一个实例来使用它,并携带所有预期的值。

这是否值得努力的问题不是其他人可以告诉你的。您必须评估A)角落出错的可能性B)此类错误的成本。

从TDD的角度来看,你甚至会测试这些细节。

我的个人想法:有时必须要务实。只是"记录"的单元测试生产代码的作用在我看来并不太有用。尽管如此,有时除此之外别无他法。在这个意义上:我建议测试这些细节,但是我会退后一步,设计一个解决方案,使相应的测试编写尽可能简单直接。

换句话说:我会测试这些东西,但要确保我能用最少的努力做到这一点。