我想了解更多关于JUnit和TDD,但我遇到了一些测试用例之间耦合的问题。减少测试用例之间的耦合
当我为特定数据类型的API编写测试用例时,说一个Deque<T>
,如何限制测试用例之间的耦合?举例来说,如果我的方法insertFirst(T item)
编写测试用例,它看起来非常简单的假设,我应该能够调用该方法正确初始化的对象之后,触发两件事情:
- 的
Deque
的大小对象应该增加一个 - 如果我随后调用相应的
T removeFirst()
方法,它应该返回一个对初始调用插入的对象的引用。
但是,这至少会在我的两个测试用例之间产生不希望的耦合,其中一个测试用例传递取决于另一个API方法的正确实现。例如,为了通过这个测试用例,我需要一个正确的实现来检查Deque
中的项目数量以及删除项目。如果我对任何一种方法的测试出于任何原因都是不正确或不完整的,那么我对insertFirst
方法的测试将自动受到怀疑。
避免这种情况的最佳做法是什么?我以某种方式编写测试用例是否错误?
我明白你在说什么,但是这不会创建方法的循环依赖吗?为了测试插入,我必须使用remove,并且为了测试remove,我使用insert?不知何故,这似乎是错的。这可能是因为我对这些想法没有足够的经验,我很快就会因为不舒服而变得舒适。感谢您的澄清。 – crlane 2013-02-20 13:59:08
@crlane:是的,它创建了某种循环依赖。这就是为什么即使只有一次测试失败,你也无法说出你的课程*的任何事情。只有*全部*测试通过,你才知道一切都按预期工作。 – 2013-02-20 14:00:20
@crlane:请参阅具体示例的更新答案。 – 2013-02-20 14:12:32