GoogleTest中的参数化测试无法按预期工作

时间:2017-08-27 18:18:18

标签: c++ googletest

我刚开始学习googletesting而且我正在玩它。 我想使用参数化测试来检查类的函数成员返回的值是否应该是它。 我已经声明了一个名为'myClass'的类,其中我使用构造函数设置变量的值,并且我还有一个公共函数'retA()',它返回它的值。

然后我声明了一个fixture类,在其中我创建了一个'myClass'的对象(obj),用构造函数实例化成员a并将obj.retA()函数的值赋给int值'result'。然后我写了一个'TEST_P',其中我正在检查结果是否是我期望的结果并实例化TEST_P。然后在主要的我开始所有测试。

当我只传递不应该使测试失败的参数时,我的测试失败了,我不明白为什么:((我认为结果应该是3)

请帮我澄清一下。谢谢。

#include "stdafx.h"
#include "gtest\gtest.h"
#include "gmock\gmock.h"
#include "Tests.cpp"

class myClass
{
private:
    int a;
public:
    myClass() {}
    myClass(int a) { a = this->a; }
    void setA(int val) { a = val; }
    int retA() { return a; }
};

class myFixture : public ::testing::TestWithParam<int>
{
public:
    int result;

    myFixture()
    {
        myClass obj( GetParam() );
        result = obj.retA();
    }
};

TEST_P(myFixture, Test1) {
    // Inside a test, access the test parameter with the GetParam() method
    // of the TestWithParam<T> class:
    ASSERT_EQ(3, result);
}

INSTANTIATE_TEST_CASE_P(
    InstantiationName, myFixture, ::testing::Values(3);
);

int main(int argc, char** argv)
{
    ::testing::InitGoogleMock(&argc, argv);
    return RUN_ALL_TESTS();

}

1 个答案:

答案 0 :(得分:1)

你做的一切都完全正确。期待小事,很难找到......;)

在您的受测试类(myClass)中,构造函数this中的内容被颠倒过来。它应该是这样的:

myClass(int a) { this->a = a; }