上下文
我正在编写一个程序来识别可能存在冗余的测试用例。
我使用AspectJ
跟踪每个测试调用路径并基于此构建调用上下文,并在测试完成后对此执行分析并生成结果。
根据所需的调用上下文的算法和级别,将更改分析阶段所需的时间。但是,测试阶段是一致的,并且由于AspectJ
必须跟踪每个方法调用,因此通常需要超过60分钟。
我发现解决此问题的一种方法是保存测试运行的结果,因此我可以简单地对此数据运行新分析而不是重新运行。节省自己的时间并允许我在更大的基准测试中执行测试,例如Spring
或Ant
。
目前,我正在使用Ant批量测试junits。
我有一个由方面调用的服务,只是为每个测试保存所有方法调用,这是在完成后由对象提取然后进行分析。
问题:
谁应该负责将此数据保存到磁盘?它应该是从服务,服务本身或将使用该服务的其他对象中提取数据的对象吗?
tldr:
持有数据的对象是否应负责保存? 或者它应该是另一个对象?
答案 0 :(得分:3)
您肯定希望保存与存储无关。我建议对存储进行(单独)抽象,然后实现它。这种方式(特别是如果您想对数据运行不同类型的分析),您可以调整数据持久性和检索的性能,而不是生成数据。
更精确一点:我建议您的方面调用的服务实际上应该使用单独的存储服务:
public interface AnalysisDataStorageService {
public void save(AnalysisDataObject o);
public List<String> getPackageNames(String match);
public List<String> getClassNames(String match);
public List<AnalysisDataObject> get(
String packageNameFilter,
String classNameFilter,
int paramterCountFilter,
Clazz parameterTypeFilter,
Integer executionTimeOverFilter,
Integer executionTimeUnderFilter);
}
在这种情况下,一个类负责生成数据,而另一个类负责保存和检索数据。任何人都不应该知道或关心另一个人是如何做到的。