我设计了一个非常简单的基于磁盘的哈希表。我已经测试过了,冲突的数量理论上是正确的,但是测试涉及到在类中添加一个字段,当在检索条目的过程中发生冲突时,该字段会递增,并在末尾检查冲突的数量是否一致。这个计数器在真实的类中完全无用。所以我想知道是否有更聪明的方法来测试类,而不添加JUnit测试之外不需要的字段。
更具体地说,我可以写一个类的模型:
public class HashTable {
//some fields here
int collisions_counter = 0; //this is only needed for testing! useless otherwise
//some methods here
public TableEntry get(Key key) {
//code to find the entry
if (collisions)
collisions_counter++;
//code to return the entry
}
}
这是非常混乱的,因为如果我想改变冲突解决策略或哈希函数,我需要手动添加字段到类中,重写逻辑来计算冲突,测试类,然后删除字段,因为我在最终的工作类中不需要它。
1条答案
按热度按时间umuewwlo1#
如果你要使用依赖注入呢?据我所知,你的哈希表算法依赖于磁盘操作。我不知道你的解决方案,但我假设你从磁盘读写。如果你把这些操作抽象出来(例如,通过使用接口),您可以将依赖关系注入到散列表解决方案中(例如,通过构造函数)。在主代码中,你可以注入基于真实的磁盘的实现。但是当你测试它时,你可以注入一个mock(你自己的mock或者Mockito库中的一个),并使用mock来Assert它被调用的次数。