我和我的同事昨晚对我们的 PHP/MySQL 应用程序中的单元测试有一点分歧。我们中的一半人认为,在对类中的函数进行单元测试时,您应该模拟该类及其父类之外的所有内容。我们中的另一半人争辩说,你也不应该 mock 任何直接依赖于该类的东西。
具体的例子是我们的日志记录机制,它通过一个静态的 Logging 类发生,我们在整个应用程序的不同位置调用了很多 Logging::log() 。我们前半部分说应该伪造(模拟)Logging 机制,因为它将在 Logging 单元测试中进行测试。我们的后半部分争辩说我们应该在我们的单元测试中包含原始的 Logging 类,这样如果我们对我们的日志接口(interface)进行更改,我们将能够看到它是否会由于失败而在应用程序的其他部分产生问题更新调用接口(interface)。
所以我想根本问题是——单元测试是用来测试封闭环境中单个单元的功能,还是显示更大环境中单个单元发生变化的后果?如果是其中之一,您如何完成另一个?
最佳答案
您和您的同事无意中发现了单元测试和集成测试之间的区别。 mock 一切都会为前者做;不会对后者进行模拟依赖。
当然,您为粒度划定的界线也有点主观 - 但在单元测试的最详细级别上,您不应该担心每个测试的特定主题之外的任何事情。
关于php - 单元测试——基本目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2762339/