junit 在不添加只在测试中使用的字段的情况下测试类的正确方法是什么?

eyh26e7m  于 2023-01-02  发布在  其他
关注(0)|答案(1)|浏览(107)

我设计了一个非常简单的基于磁盘的哈希表。我已经测试过了,冲突的数量理论上是正确的,但是测试涉及到在类中添加一个字段,当在检索条目的过程中发生冲突时,该字段会递增,并在末尾检查冲突的数量是否一致。这个计数器在真实的类中完全无用。所以我想知道是否有更聪明的方法来测试类,而不添加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
  }
}

这是非常混乱的,因为如果我想改变冲突解决策略或哈希函数,我需要手动添加字段到类中,重写逻辑来计算冲突,测试类,然后删除字段,因为我在最终的工作类中不需要它。

umuewwlo

umuewwlo1#

如果你要使用依赖注入呢?据我所知,你的哈希表算法依赖于磁盘操作。我不知道你的解决方案,但我假设你从磁盘读写。如果你把这些操作抽象出来(例如,通过使用接口),您可以将依赖关系注入到散列表解决方案中(例如,通过构造函数)。在主代码中,你可以注入基于真实的磁盘的实现。但是当你测试它时,你可以注入一个mock(你自己的mock或者Mockito库中的一个),并使用mock来Assert它被调用的次数。

相关问题