我可以在 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);
}
在 google test 中使用
TEST_F
时,测试函数是 Fixture 类的子类。在 C++ 中,友元类不会扩展到友元的后代类。因此,虽然 TestA
是友元,但由 TEST_F
宏创建的类却不是。