我有一个DeliveryScheduleParser
类,它读入电子表格并将其解析为多个对象,这些对象都以getClient()
方法返回的客户端对象结尾DeliveryScheduleParser
} class。
public class DeliveryScheduleParser {
private final HashMap<String, Integer> _headerColumnNumbers;
private final File _file;
private HSSFSheet sheet;
private Client client;
public DeliveryScheduleParser(File file) {
this._file = file;
sheet = getSheet(_file);
_headerColumnNumbers = getHeaderMap(sheet);
parseSheet();
}
public Client getClient(){
return client;
}
// Other private methods here
}
此类中的parseSheet()
方法基本上完成了所有工作,并且只调用了一些单独进行单元测试的静态 Sanitizer 方法。
我的问题基本上是确保客户端对象正确填充正确对象的最佳方法,并且这些对象又填充了正确的对象(有很多{{1嵌套在其他ArrayLists
)中。
我还想针对具有不同数据的电子表格运行单元测试,以确保所有解析都是正确的。
答案 0 :(得分:0)
我想这个场景包含两套测试。
对于模拟,您可能希望使用Mockito或任何模拟框架以方便使用。
因此,基本上能够“确保客户端对象正确填充了正确的对象”,您必须测试Client
,但不能立即测试DeliveryScheduleParser
。实际上,您的DeliveryScheduleParser
应该是合作者,并与Client
进行互动。
然后你可能希望以类似的方式分解这个实现,因为它听起来像这里的对象是完全耦合的。
对于ArrayList
互动,您可能希望使用List
界面并进行模拟。
针对不同电子表格进行测试是一种集成测试。您可以再次模拟文件提供程序(此处不清楚),您可以在每个测试中提供不同的电子表格。您可以将这些spreedsheets添加到test文件夹下的资源中,并可以使用reource loader加载测试表。我还要将这些测试与单元测试分开以获得速度。
我想更具体但希望它有所帮助......
答案 1 :(得分:0)
由于您的类似乎正在将实际文件解析为对象世界,因此我建议编写集成测试 - 使用真实文件练习您的类的测试。使用解析器的类型的单元测试可以依赖于角色/接口(并模拟它)。
您还可以使用相当于数据驱动/参数化的测试来针对不同的输入(在本例中为文件)运行相同的测试
理想情况下,解析责任应该驻留在一个类型/类中。它应该接受一个输入并产生另一种类型(数据结构/对象)作为输出。