测试适用于成员变量的成员函数

Testing a member function which works on member variables

本文关键字:成员 函数 变量 测试 适用于      更新时间:2023-10-16

我有一个类Addition下面给出

class Addition 
{
private:
    int x;
    int y;
public:
    Addition(int a, int b)
    {
         x = a;
         y = b;
    };
    int AddtwoValues()
    {
          return (x + y);   
    }
};

测试函数AddtwoValues

#include <limits.h>
#include "gtest/gtest.h"
#include "Addition.h"
class AdditionTest : public ::testing::Test {
 protected:
  virtual void SetUp() {
  }
  virtual void TearDown() {
  }
};
TEST_F(AdditionTest,twoValues){
    Addition addition(5,4);
    EXPECT_EQ(9,addition.AddtwoValues());
    EXPECT_EQ(5,addition.AddtwoValues());
}

以上是测试函数AddtwoValues()的可接受方法吗?我的问题是,既然AddtwoValues()参数是class Addition的成员函数,AddtwoValues()应该参数化吗?这是一个好的编码实践吗?特别是如果成员变量比两个整数更复杂。

如果不讨论为什么要编写一个类来添加两个值,您的 Addition 类以这种方式无效。成员函数AddTwoValues被声明为静态的,这意味着它在类级别运行,而不是在每个对象上运行。因此,您无权访问两个非静态成员xy,这两个成员被声明为非静态,因此对于您创建的每个对象都存在。像这样更改代码:

class Addition 
{
private:
    int x;
    int y;
public:
    public Addition(int a, int b)
    {
         x = a;
         y = b;
    }
    int AddtwoValues()
    {
          return x + y;   
    }
};

你应该没事。有关static成员的所有详细信息,请参阅此处:https://en.cppreference.com/w/cpp/language/static

关于"最佳实践":对于一个相当微不足道的任务来说,有这样一个小的例子,很难说,原则上它没有任何问题,包括测试。

以上测试函数的可接受方法AddtwoValues()

从本质上讲,这将是一个完美的测试,除了你给AddtwoValues()两次打电话,期待不同的结果,这注定会失败......

AddtwoValues()参数化吗?这是一个好的编码实践吗?特别是如果成员变量比两个整数更复杂。

我认为,如果您想要完全覆盖,您应该为xy添加至少一个具有不同值的秒测试。否则,代码可能会(意外(更改为

int AddtwoValues()
{
      return 9;   
}

并且您唯一的EXPECT_EQ(9,addition.AddtwoValues());测试用例将在没有检测到问题的情况下通过。