单元测试 - 基本目标?

Dav*_*vid 6 php phpunit unit-testing

我和我的同事昨晚在我们的PHP/MySQL应用程序中对单元测试有点分歧.我们中的一半人认为,当对一个类中的函数进行单元测试时,你应该模拟该类及其父类之外的所有内容.我们的另一半人认为你不应该嘲笑任何直接依赖于阶级的东西.

具体的例子是我们的日志记录机制,它通过一个静态的Logging类发生,我们在整个应用程序的不同位置都有一些Logging :: log()调用.我们前半部分说Logging机制应该伪造(模拟),因为它将在Logging单元测试中进行测试.我们下半部分认为我们应该在我们的单元测试中包含原始的Logging类,这样如果我们对日志记录界面进行更改,我们将能够看到它是否因为失败而在应用程序的其他部分中产生问题更新呼叫界面.

所以我猜基本问题是 - 单元测试是用来测试封闭环境中单个单元的功能,还是在更大的环境中显示单个单元更改的后果?如果是其中之一,你如何完成另一个?

Amb*_*ber 11

您和您的同事偶然发现了单元测试和集成测试之间的区别.模仿一切都将为前者完成; 不会嘲笑后者的依赖关系.

当然,绘制粒度线的地方也是主观的 - 但是在单元测试的最精细程度上,你不应该担心每个测试的特定主题之外的任何事情.

  • 有时候,当你决定对某些东西进行测试并且是*platform*的一部分时,即使在单元测试中也可以决定使用它.例如,您不会伪造标准库,也可能不会伪造您信任的框架以正常工作.如果你能负担得起这样的信任,它可能会节省一些代码. (2认同)

kyo*_*ryu 5

单元测试就像测试电子设备中的单个组件一样.

如果您想在吉他放大器中测试单个晶体管,则不要插入吉他,调高音量,并检查发出的声音.那将是愚蠢的.要检查晶体管,可以将设备连接到该晶体管的引线并仅测量其输入和输出.

在某些时候你会测试整个事物(吉他会产生噪音等),但这与测试单个晶体管不同.