我下面有一个课程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()
进行参数设置吗?这是一个好的编码习惯吗?尤其是当成员变量比两个整数复杂时。
答案 0 :(得分:2)
无需讨论,为什么要编写一个添加两个值的类,您的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
关于“最佳实践”:对于一个相当琐碎的任务,只有这么小的例子,很难说,原则上没有什么错,包括测试。
答案 1 :(得分:0)
以上是测试功能
的可接受方法AddtwoValues()
从本质上讲,这将是一个非常好的测试,只是您两次调用AddtwoValues()
,期望得到不同的结果,这肯定会失败...
[S]应
AddtwoValues()
参数化吗?这是一个好的编码习惯吗?尤其是当成员变量比两个整数复杂时。
我认为,如果要完全覆盖,则应添加至少一秒钟的测试,其中x
和y
的值应不同。否则,代码可能会(偶然)更改为
int AddtwoValues()
{
return 9;
}
,您唯一的EXPECT_EQ(9,addition.AddtwoValues());
测试用例将通过而不会发现问题。