c++ - 访问实例类的变量

标签 c++ testing

首先,对于糟糕的标题命名意义,我深表歉意。我不确定如何正确表达它。

我的问题是我有四个给定的类,我称之为 ABCD 为简单起见。

  • 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/

相关文章:

c++ - 我如何在 GCC 下强制 'bool' 的大小

c++ - 如何从 std::map 中过滤项目?

ios - Xcode UI 测试计划

php - 是否可以在本地模拟Azure网站进行测试?

c++ - 删除多维矩阵时出错

C++ - 当您用 float 索引数组时会发生什么?

ruby-on-rails-3 - 如何使用 rspec 和 factory girl 设置我的身份验证数据?

unit-testing - 如何为数学优化程序编写测试?

c++ - 使用 #ifdef 的宏不起作用

ruby - 截断、事务和删除数据库策略之间的区别