首先,对于糟糕的标题命名意义,我深表歉意。我不确定如何正确表达它。
我的问题是我有四个给定的类,我称之为 A
、B
、C
和 D
为简单起见。
D
是一个包含大量数据的大类。C
基本上是一个包含许多D
的表。B
是一个单例,并为A
提供它的一个实例。B
有一个成员,C* c
。A
包含调用B
做某事的方法。
我想测试 D
是否存储了正确的信息,并通过 A
传递给程序。
这是我的代码的简化版本,用于说明设置。
#include <stdexcept>
#include <string>
#include <vector>
class D {
public:
// Greatly simplified; this class holds much more data in reality.
std::string info {};
};
class C {
private:
std::vector<D*> d {};
public:
D* getD(int dNum) {
return this->d.at(dNum);
}
};
class B {
private:
C* c {};
D* d {};
B() {
this->c = new C();
}
~B() {
delete this->c;
}
B(const B&) = delete;
B& operator=(const B&) = delete;
public:
static B* getInstance() {
static B instance {}; // singleton
return &instance;
}
bool doSomething(const std::string& text) {
int dNum = std::stoi(text); // simplified
try {
this->d = this->c->getD(dNum);
this->d->info += text;
return true;
} catch (const std::out_of_range&) {
return false;
}
}
};
class A {
public:
bool someFunction(const std::string& text) {
return B::getInstance()->doSomething(text);
}
};
我的测试应该看起来像这样。
void test() {
std::string testString {"1"};
A a {};
a.someFunction(testString);
// How can I test that for the 'D' object 'd', that was manipulated by the
// call to 'someFunction', 'd.info == testString'?
}
我看过 stub 和模拟,但我不明白如何在这种情况下使用它们(我实际上从未使用过它们)。
再次抱歉,如果我的解释不清楚。我在 C++ 方面很弱,因此真的不知道如何解释。因此,即使搜索类似的问题也被证明是不可能的,所以如果之前有人问过这个问题,我深表歉意。
编辑:我知道我可以通过在 B 中实现一些 getter 方法来获取 C 来做到这一点,但我希望有另一种方法。
最佳答案
您没有显示您是否正在为类指针分配内存。在a->someFunction(testString);
中,a
指向哪里?那么,在class B
中,neededD = c->getD(dNum);
c
指向哪里呢?此外,您必须将行 requiredD = d->at(dNum);
更改为 requiredD = d.at(dNum);
。请提供完整的详细信息以更好地理解问题。
关于c++ - 访问实例类的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36301325/