c++ - 单元测试私有(private)方法是一种好习惯吗?

标签 c++ unit-testing private

我想知道单元测试私有(private)方法是否是一种好习惯?

通常只应测试公共(public)接口(interface)。

但是,我发现在复杂的计算中,调用大量不同的私有(private)方法,先对私有(private)方法进行单元测试,然后对公共(public)接口(interface)方法进行简单的测试。

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

void play(){ ... }
void pause(){ ... }
void seek(time t)
{
    //All Private methods
    checkIfValidTimeRange(...);
    moveToFilePos(...);    
    fillBuffers(...);      
}

通常我会为以下代码编写单元测试:checkIfValidTimeRange(...)moveToFilePos(...)fillBuffers(...)

但我不确定这样做是否是好的做法。

最佳答案

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

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

目前,您的 音乐播放器 负责 I/O、内存管理等。这一切真的在其职责范围内吗?

关于c++ - 单元测试私有(private)方法是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9202862/

相关文章:

android - Matlab audioread/audioplay 通过 Coder 转换为 C/C++

python - 如何正确使用单元测试(任何语言)

c# - 在异步单元测试中调用 Assert.Inconclusive() 被报告为失败

ios - 如何测试使用 Jest 导入自定义 native 模块的 React Native 组件?

api - Apple 应用指南——私有(private) API?

java - 我想让打印机打印,直到帐户中的余额不足以打印作业为止

c++ - 带有链接到 OpenCV 的 Qt 插件的 Visual Studio

c++ - 如何使用 PostThreadMessage 从 C++ 关闭 Internet Explorer

c# - 如何使用 NSubstitute 模拟带有私有(private) setter 的属性

c++ - const 或 ref 或 const ref 或 value 作为 setter 函数的参数