假设我正在使用现有代码库中的一些代码来开发新特性。我正在测试如何驱动我的设计,所以我对我的特性部件使用了带有存根/模仿的协作者的独立测试。现在我想测试他们是否在一起玩得很好。
我是否应该用连接在一起的所有真正的依赖项来编写一个巨大的测试(除了外部系统等)?换句话说,我应该为整个故事编写集成测试,还是将其分割成几个较小的部分,测试,假设3-4个对象一起玩,只做这个故事的一部分?然后,我最终会为整个特性编写测试,从头到尾。但是,我应该在一个测试用例中执行多少个对象的协作呢?
如果是后者,我需要准备安装程序(连接依赖项,存根部分),为每个测试准备测试数据和预期条件。现在往上走(在更高层次上对越来越多的模块进行分组),我仍然需要在某种程度上“复制”这个准备步骤。这“复制”不是很糟糕吗?
我说的是“测试级别”,如下所示:
---------------------------------------------------------------
| ------------------------------------
|| ------ ------ |
|| |unit| |unit| units integration |
|| ------ ------ |
|------------------------------------- integration of some
| already integrated
|------------------------------------- units, etc
|| ------ ------ |
|| |unit| |unit| units integration |
|| ------ ------ |
|-------------------------------------
|---------------------------------------------------------------
同样,正如TDD实践者所说的“经典”(而不是“嘲弄者”),我应该尽可能多地使用真正的实现。但是,测试对象具有3个级别的依赖关系,并且最终具有DB或外部系统,这意味着我仍然必须对某些内容进行存根/模拟。那么,我是否应该在结束时只嘲笑这种繁重的/外部服务呢?
问这个问题的触发因素是,让我的所有测试保持不变变得越来越困难,而且我认为我在某个地方失败了。代码中的每一次介质更改都会导致大量测试失败。我想知道我做错了什么。
预先感谢所有的提示和答案。
发布于 2012-06-22 11:14:26
想想为什么你的测试如此脆弱。(一些我的思想.虽然是针对端到端的测试)。我需要更多关于你情况的信息才能提出补救办法。
如果功能中断,测试就会失败--如果您重构代码,即通过行为保持转换来更改结构,那么您的测试就不应该中断。
我现在的方法是
更多信息:
https://stackoverflow.com/questions/11147273
复制相似问题