CppUnitTestFramework:TEST_CLASS_INITIALIZE 中设置的变量值不会在 TEST_METHOD 中保留

CppUnitTestFramework: Variable value set in TEST_CLASS_INITIALIZE does not persist in TEST_METHOD

我在我的 TEST_CLASS 中声明了一个 std::string,应该为要在另外两个 TEST_METHODs 中使用的 class 初始化一次。

然而,当 TEST_CLASS_INITIALIZE 被调用时(在任何 TEST_METHOD 之前执行 运行),projectDirectory 被正确设置。然而,问题是当我调试每个 TEST_METHOD 中 projectDirectory 的值时,该值是一个空字符串 ("")。

我做错了什么?

#include "pch.h"
#include "CppUnitTest.h"
#include "../Project/ConfigurationManager.h"
#include <string>

#define STRINGIFY(x) #x
#define EXPAND(x) STRINGIFY(x)

using namespace Microsoft::VisualStudio::CppUnitTestFramework;
using namespace Project;

TEST_CLASS(ConfigurationManagerUnitTests) {

public:
    std::string projectDirectory;

private:

    TEST_CLASS_INITIALIZE(ConfigurationManagerUnitTestInitialization) {
        std::string projectDirectory = EXPAND(UNITTESTPRJ); // UNITTESTPRJ preprocessor def. equal to Project directory
        projectDirectory.erase(0, 1); // remove 1st quotation mark
        projectDirectory.erase(projectDirectory.size() - 2); // remove closing quotation mark & period symbol
    }

    TEST_METHOD(ConfigurationFileProcessing) {
        ConfigurationManager* manager = ConfigurationManager::getConfiguration();

        Assert::IsFalse(manager->ProcessConfigurationFile(projectDirectory + "Configuration1.ini"));
        Assert::IsTrue(manager->ProcessConfigurationFile(projectDirectory + "Configuration2.ini"));
        Assert::IsTrue(manager->ProcessConfigurationFile(projectDirectory + "Configuration3.ini"));
        Assert::IsTrue(manager->ProcessConfigurationFile(projectDirectory + "Configuration4.ini"));
    }

    TEST_METHOD(ConfigurationFileInitialization) {
        ConfigurationManager* manager = ConfigurationManager::getConfiguration();

        Assert::IsTrue(manager->InitializeConfiguration(projectDirectory + "Configuration5.ini"));
    }

};

P.S。我确实看过 post 是相似的,但我的问题是 projectDirectory 是一个空字符串,即使是第一个使用该字符串的方法也是如此。

您的示例代码至少存在几个问题。

  1. 您在 TEST_CLASS_INITIALIZE 中声明了一个局部变量 projectDirectory,它隐藏了 class 成员 projectDirectory

  2. TEST_CLASS_INITIALIZE 不能用于初始化 class 成员(除非它们被声明为静态)。您应该为此使用 TEST_METHOD_INITIALIZE