如何在不嘲笑一切的情况下编写好的单元测试?

时间:2017-03-31 06:16:10

标签: unit-testing testing junit mocking mockito

我读到嘲笑一切都很糟糕。
Test Smell: Everything is mocked
Mock Everything Is a Good Way to Sink

我还读过单元测试查看单个组件,而集成测试测试整个系统一起工作。
Writing Great Unit Tests: Best and Worst Practices

这让我很困惑。据我所知,要编写一个合适的单元测试,需要通过模拟除S.U.T之外的所有内容来隔离单个组件。如果在整个测试中使用真实对象,那么该测试不会成为集成测试吗?

如何在不模仿一切的情况下编写好的(隔离的)单元测试?

1 个答案:

答案 0 :(得分:5)

模拟模型是难闻的气味。您应该只模拟参与测试方法逻辑的依赖项,而不是数据。  但即使有这个简单的规则,事情并不总是显而易见的。

在某些情况下,单元测试方法是直接的,因为该方法有自己的逻辑规则,并且还有一个或两个对不同外部依赖项的调用来执行以完成其逻辑。 在这种情况下,嘲笑似乎很自然。

在其他一些情况下,单元测试不太明显,因为测试方法的逻辑规则很少。它在实现中主要调用外部依赖项。在这种情况下,嘲笑似乎非常不自然,因为测试的基本要素可能是嘲弄。 通过模拟每个调用来测试流调用是测试白盒子。它很脆弱,因为它不测试方法逻辑行为。它只证明了一件事:你的代码完成了它的工作。

在这种情况下,我认为集成测试应该优于单元测试。