CppUnitTestFramework:在TEST_CLASS_INITIALIZE中设置的变量值不会在TEST_ME



我在TEST_CLASS中声明了一个std::string,它应该初始化一次,用于其他两个TEST_METHODs中使用的类。

然而,当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"));
}
};

注:我确实看过这篇类似的文章,但我的问题是projectDirectory是一个空字符串,即使是使用字符串的第一个方法。

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

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

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

最新更新