测试模型状态:查看db还是使用适当的方法?

时间:2014-08-13 09:42:10

标签: node.js tdd bdd

所以,我想测试我的模型Queue执行添加Item的方式。我需要完成以下步骤:

  • 清除整个队列
  • 将一个项目添加到队列中
  • 查找队列中的项目

队列在内部使用MongoDB。

我似乎有以下选择:

(a)清除执行相应MongoDB命令(db.queue.remove())的队列集合,调用queue.add (item),然后检查集合状态(db.queue.find()或{ {1}});

(b)使用db.queue.find()清除队列,然后拨打queue.clear(),然后选中queue.add(item)

theese选项之间的区别是什么?选择其中一个而不是另一个的原因是什么? (a)看起来更“实用”,但在代码和测试中引入了一些脆弱性和代码重复(这是一个问题,顺便说一下?),但(b)让我觉得我测试了一切,但当时没什么特别的。

2 个答案:

答案 0 :(得分:2)

使用(b)。您的单元测试不应该对被测试类的内部实现细节做出假设。 “测试行为,而不是实施”。如果内部实现发生变化,使用(a)将导致脆弱的测试失败。

答案 1 :(得分:0)

最后我结束了以下内容。

(a)和(b)方法与SUT的耦合不同。 (a)耦合较少,这是round-trip test,而(b)是紧耦合的,因此它是layer-crossing test

第一个跟随所谓的Use the Front Door First Principle,第二个跟随Back Door Manipulation Principle

第一种方法侧重于班级的公共合同。第二个 - 关于它的实施。

我们需要两种测试。第一个开发类的接口,第二个 - 驱动它的实现。

this nice article可以找到有关强烈分离这些测试重要性的更多细节。