单元测试私有方法是一种好习惯吗?

Ant*_*ton 13 c++ unit-testing private

我想知道单元测试私有方法是否是一个好习惯?

通常只应测试公共接口.

但是,我发现在复杂计算过程中,调用大量不同的私有方法,首先对私有方法进行单元测试更容易,然后对公共接口方法进行简单测试.

举个例子,假设你有一个音频播放器,你有功能:

void play(){ ... }
void pause(){ ... }
void seek(time t)
{
    //All Private methods
    checkIfValidTimeRange(...);
    moveToFilePos(...);    
    fillBuffers(...);      
}
Run Code Online (Sandbox Code Playgroud)

通常我会编写单元测试:checkIfValidTimeRange(...),moveToFilePos(...), fillBuffers(...).

但我不确定这样做是不是很好.

k.m*_*k.m 14

不是一个好习惯(但这并不意味着你永远不应该这样做),如果可能你想避免它.测试私有方法通常意味着您的设计可能更好.让我们快速浏览一下你的播放器示例:

  • moveToFilePos:听起来更像是做I\O操作的事情的责任,而不是音乐播放器的责任
  • fillBuffers:更多的是内存管理器的工作,而不是音乐播放器
  • checkIfValidTimeRange:再次,可能会被移出玩家的范围到一些简单的验证类(似乎这个在其他地方也可能有用)

目前您的音乐播放器执行I/O,内存管理以及其他情况.这一切都在其职责范围内吗?


Don*_*oby 5

如果您的私有方法足够复杂以保证测试,那么您可能会遗漏某些私有方法被公开的类.

你当然可以测试私有方法,但你应该把它作为一个暗示,你的设计有问题.