gpt4 book ai didi

java - 转换器类测试驱动

转载 作者:太空宇宙 更新时间:2023-11-04 07:30:33 24 4
gpt4 key购买 nike

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

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 方法应该是私有(private)的,因为没有必要从外部调用它,但出于测试目的,我在包范围内定义了它,这看起来不太好

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

我遇到了设计问题吗?或者有什么有用的解决方法吗?将其分成不同的类是否有意义,这对我来说听起来不太好,因为我仍然觉得这是类中的一项职责(SRP)(转换数据)?

感谢帮助

最佳答案

问题 1(或许还有问题 2)的答案:

如果您觉得需要为 convertStructure() 编写测试,我认为这表明它应该在自己的类中。测试不应测试比单一职责更小的事情(IMO)。

也就是说,我不确定您是否需要单独测试 convertStructure()。测试 convertLibrary() 还不够吗?或者也许是一个更大的单位?

意见:我更喜欢从外到内进行测试,从高水平开始进行测试,并在需要时测试较小的部分。从系统用户的角度开始测试行为,并仅在需要时测试实现细节。但并非所有人都同意我的观点。

关于java - 转换器类测试驱动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17783962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com