测试适用于成员变量的成员函数
Testing a member function which works on member variables
我有一个类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
被声明为静态的,这意味着它在类级别运行,而不是在每个对象上运行。因此,您无权访问两个非静态成员x
和y
,这两个成员被声明为非静态,因此对于您创建的每个对象都存在。像这样更改代码:
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()
参数化吗?这是一个好的编码实践吗?特别是如果成员变量比两个整数更复杂。
我认为,如果您想要完全覆盖,您应该为x
和y
添加至少一个具有不同值的秒测试。否则,代码可能会(意外(更改为
int AddtwoValues()
{
return 9;
}
并且您唯一的EXPECT_EQ(9,addition.AddtwoValues());
测试用例将在没有检测到问题的情况下通过。
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 将公共但非静态的成员函数与ALGLIB集成
- 使用指向成员的指针将成员函数作为参数传递
- 将重载的成员函数传递给函数模板
- 我不小心调用了一个没有自己类对象的成员函数.但这是怎么回事呢
- 如何在C++中使用非静态成员函数作为回调函数
- C++错误C2600:无法定义编译器生成的特殊成员函数(必须首先在类中声明)
- 关联容器的下界复杂性:成员函数与非成员函数
- 在 C++ 中用派生类型重写成员函数
- 链表的泛型函数remove()与成员函数remove)
- 如何将lambda作为模板类的成员函数参数
- constexpr构造函数需要常量成员函数时出现问题
- 将自由函数绑定为类成员函数
- 区分非成员函数和头文件中的成员函数
- 如何从子成员函数修改父公共成员变量
- 保留对其他类的成员函数的引用
- 在运算符重载定义中使用成员函数(const错误)
- 内联如何影响模块接口中的成员函数
- 将成员函数指针作为参数传递给模板方法