在阅读了由测试指导的面向对象软件的增长后,我了解到了测试隔离和测试脆弱性。每个测试都应该非常特定于一段代码或功能的想法,并且测试的代码覆盖重叠应该保持在最低限度。隐含的理想是代码中的每次更改都应导致仅破坏一个测试。避免花费时间通过多个损坏的测试来确认一个更改是原因以及它是否已通过测试修改得到修复。
现在这对于单元测试来说似乎很容易,它们本质上是非常孤立的。然而,当集成测试呈现时,似乎很难避免多个测试执行相同的代码路径,尤其是在单元测试之外运行时。
所以我的问题是,在进行集成测试时应该模拟哪些依赖项?任何事情都应该被嘲笑吗?是否应该测试单个执行路径,并且模拟与该代码路径不直接相关的所有副作用?
我在玩成对集成测试的想法。测试两个对象之间的一种关系,并模拟其他一切。那么这些对象中的任何一个的更改都应该对其他集成测试的影响最小,除了通过成对形成完整的端到端测试链之外。
感谢您提供任何信息..
编辑:为了澄清,我基本上是在问“如何在正常的开发过程中避免大量失败的集成测试?”。我认为这是通过使用模拟来实现的,以及为什么我询问要模拟什么。
更新:我发现 JBRainsberger 关于集成测试的一个非常有趣的讨论,我认为它很好地回答了这个问题,虽然可能有点争议。标题是“Integration Tests are a Scam”,所以你可以猜到,他根本不提倡 Integration Tests(端到端类型测试)。争论是集成测试总是远远低于彻底测试可能的交互所需的量(由于组合爆炸),并且可能给出错误的信心。相反,他推荐了他所谓的协作测试和合同测试。这是一个 90 分钟的演讲,不幸的是,白板不是很清楚,也没有代码示例,所以我还在摸索。当我有明确的解释时,我会在这里写!除非别人打败我。。
这是合同测试的简短摘要。听起来像按合同设计类型断言,我相信可以/将在 C++ 中的非虚拟接口模式中实现。
http://thecodewhisperer.tumblr.com/post/1325859246/in-brief-contract-tests
集成测试是一个骗局视频谈话: http: //www.infoq.com/presentations/integration-tests-scam
概括:
集成测试是一个骗局。您可能正在编写需要彻底测试的 2-5% 的集成测试。您可能在各处重复单元测试。您的集成测试可能会到处重复。当集成测试失败时,谁知道出了什么问题?学习解决问题的两管齐下的攻击:协作测试和合同测试。