如何使用gtest使用成员C ++基于私有类测试行为

时间:2018-09-12 13:29:09

标签: c++ googletest

我想使用Google测试来测试我的课程。 假设我有一个状态机实现,当前状态为私有 所以我有一个看起来像这样的SetNextState方法:

void setNextState
{
  switch(m_currentState) //m_currentState is a private member
  {
    case INIT_STATE:
    {
       if some conditions occurred m_currentState=GO_STATE
    } 
......
  }
}

所以我有几种情况,每种情况都定义了从某种状态转移到另一种状态的行为。 我的问题: 假设状态仅与此类相关,那么如何在该方法上执行测试,所以没有输出 如何将其值设置为例如“ GO_STATE”以测试GO_STATE情况 以及在测试结束时如何检查m_currentState 我试图避免在我的UUT代码中放入朋友等,因为我希望它尽可能原始

1 个答案:

答案 0 :(得分:5)

你不知道。您执行与实际程序相同的操作,即提供输入,然后检查结果。您说没有输出,但是必须有 some 效果,否则该类是毫无意义的!

如果失败,您可以使测试成为该类的“朋友”,以便它可以检查其内部或为当前状态添加一个不变的吸气剂(并且谁真的在乎您的课程是否用户会看到吗?),但这两种选择都不是真正意义上的。

根据我的经验,您有时会意识到,您不再真正进行单元测试,而是进行功能测试,而Google Test可能不是适合该工作的工具。如果您的班级听上去那么大,这里可能就是这种情况。相反,您可以通过将类分成较小的块,然后对那些进行单元测试来帮助自己。确实取决于您要做什么。