尽管有友元类声明,仍无法在 Google 测试 TEST_F 函数中设置私有成员

问题描述 投票:0回答:1

我可以在 SetUp() 方法中成功设置和访问 privateData,但是当我尝试在 TEST_F 函数中执行相同操作时,该值似乎没有按预期更新。 TestPrivateDataSetting 测试失败,表明该值仍然是 42,而不是预期的 100。

我怀疑我如何从测试用例访问或修改私有成员可能存在问题,但考虑到设置,由于友元类声明,它应该是允许的。

问题:

什么可能导致无法从 TEST_F 函数内设置私有成员?我如何设置测试装置或我对 C++ 中的友元类机制的理解是否有错误?

#ifndef A_H
#define A_H

class A {
    friend class testsA;  // Friend class declaration

private:
    int privateData;

public:
    A() : privateData(0) {}
    void setPrivateData(int data) { privateData = data; }
    int getPrivateData() const { return privateData; }
};

#endif // A_H

#ifndef TESTS_A_H
#define TESTS_A_H

#include "A.h"
#include <gtest/gtest.h>

class testsA : public testing::Test {
public:
    A* a_instance;  // Public member instance of A
    
protected:
    void SetUp() override {
        a_instance = new A();
        a_instance->setPrivateData(42);  // Set private member in SetUp
    }
};

#endif // TESTS_A_H

#include "testsA.h"

TEST_F(testsA, TestPrivateDataSetting) {
    // Trying to access and set private data in the test case
    a_instance->setPrivateData(100);
    ASSERT_EQ(a_instance->getPrivateData(), 100);
}

TEST_F(testsA, EnsureSetUpValueAccessible) {
    // This will access the value set in SetUp
    ASSERT_EQ(a_instance->getPrivateData(), 42);
}
c++ googlemock
1个回答
0
投票

在 google test 中使用

TEST_F
时,测试函数是 Fixture 类的子类。在 C++ 中,友元类不会扩展到友元的后代类。因此,虽然
TestA
是友元,但由
TEST_F
宏创建的类却不是。

© www.soinside.com 2019 - 2024. All rights reserved.