转换器类测试驱动

时间:2013-07-22 09:25:24

标签: java tdd converter

我有一个类,它应该将数据从一种格式转换为另一种格式(Database to LibraryType)。它看起来像:

public LibraryType convertToLibrary(Database db, Parameters params) {

    Preconditions.checkNotNull(db," missing database for conversion");
    Preconditions.checkNotNull(params, "missing parameters for conversion");

    LibraryType lib = basicFactory.createLibraryType();
    lib.setName(db.getName());
    ComponentType type = convertStructure(db.getStructure(),params);

    if (type != ComponentType.EMPTY) {
        lib.addComponent(type);
    }

    return lib;
}

ComponentType convertStructure(Structure s, Parameters params) {

   if (!params.isStructureAllowed(s)) return ComponentType.EMPTY;

   ComponentType comp = basicFactory.createComponentType();       
   comp.setName(s.getName());
   return comp;
}

我对这个概念有两个问题。

  1. convertStructure方法应该是私有的,因为从外部调用它不是必需的,但出于测试目的,我将它定义为程序包范围,看起来不太好

  2. 将参数(参数)传递给子方法。实际上我会使用一个类字段,可以在构造函数中插入,但由于使用guice作为DI框架,我无法将此数据传递给构造函数。参数将在运行时更改。所以我需要将它作为方法参数传递。我可以将它设置为convertToLibrary方法中的类字段,但是我无法测试convertStructure方法。

  3. 我遇到了设计问题还是有任何有用的解决方法?将它分成不同的类是否有意义,这对我来说听起来不是很好,因为我仍然认为它是类中的一个责任(SRP)(转换数据)?

    感谢您的帮助

1 个答案:

答案 0 :(得分:1)

回答问题1(也许是问题2):

如果您认为需要为convertStructure()编写测试,我认为这表明它应该属于自己的类。测试不应该测试较小的单一责任(IMO)。

那就是说,我不确定你是否需要孤立地测试convertStructure()。没有测试convertLibrary()吗?或者可能是一个更大的单位?

意见:我倾向于在外面进行测试,在高水平测试开始并在需要时测试较小的部件。从系统用户开始测试行为,并仅在需要时测试实现细节。不是每个人都同意我的意见。