在不测试Store的情况下从数据结构中检索测试

时间:2015-11-13 21:13:21

标签: java unit-testing junit

假设我想为一个新的,未经测试的数据结构BlackBox编写一些JUnit测试。它有一个类似于Map的界面,但没有办法告诉它里面发生了什么:

blackBox.get(key);
blackBox.put(key, value);

如何在以下两种情况下正确地对.get.put进行单元测试?我无法弄清楚如何独立测试这两个。

  1. 我正在使用TDD,因此想先写测试。
  2. BlackBox是由其他人编写的,我想测试它。
  3. 我知道如果我可以访问源代码,我可以执行以下操作:

    Whitebox.setInternalState(blackBox, "storage", storageObject);
    assertEquals(blackBox.get("key"), expectedAnswer");
    

    我可以做相反的事情来测试.put()。问题是那些测试依赖于类的实现。

    那么如何在不了解或依赖类的实现细节的情况下单独测试.get.put

1 个答案:

答案 0 :(得分:1)

  

我无法弄清楚如何独立测试这两个。

你为什么要这样做?合同是否表明他们是独立的?我不这么认为。我猜合同说:

  1. 新对象创建为空,因此get将返回null / throw异常。
  2. 当你put时,你可以get
  3. 你不能get你没有put
  4. 当您put多次使用相同的密钥时,您将get最新的值。
  5. 等等。你可以测试每个不变量。当你使用Whitebox时,你开始测试实现细节,而不是合同,这使得重构(例如使用更快的实现)更加困难