![]() |
1
4
好吧,这个问题没有非常客观的答案,但是模拟对象是关于测试代码行为的,但是不能告诉您是否正确地与容器交互。 Cactus在容器中运行您的代码,因此它实际上更像是一个集成测试,但它告诉您的是,您的代码实际上与容器正确交互(它发送的是合法的,返回的是真实的)。 总而言之,一个模拟告诉你,如果你想要行为X,你得到了行为X。仙人掌告诉你,行为X在容器中得到了一个预期的结果。 你使用哪一个很大程度上取决于你想用你的测试完成什么。如果你想做更多的TDD,模拟方法是可行的。你做单独的原型设计,看看你是否足够了解容器是如何工作来编写代码的,然后你做单元测试,然后你做集成测试/验收测试来确保所有的工作都正常。 但是,如果您尝试进行更传统的单元测试,即使用不同的值来测试边缘情况和行为,那么使用mocks进行测试不会告诉您很多,因为容器的很大一部分丢失了。 我现在更喜欢模拟的方法,但是如果我回到仙人掌中,测试容器的不变量会更好,这样如果我们升级容器,我们就知道容器的工作方式没有任何重要的变化,这些变化会影响我们的代码。 |
![]() |
2
3
用于集成测试(涉及交互 具有 容器)。那是或曾经是仙人掌的最佳去处。这些测试通常是粗粒度的…他们的执行速度不太快。
对于集成测试以外的其他测试(甚至对于集成测试,我已经有一段时间没有看到仙人掌测试了)。
当你想进行单元测试时 孤立地 依赖的事物。这些测试通常是细粒度的,并且执行速度很快。
当您想要编写集成测试(即 测试相互作用 )功能测试等。 这个 Mock Objects vs In-Container testing 仙人掌网站上的页面很好地总结了这一点。 |