问题描述
我在我的 TEST_CLASS 中声明了一个 std::string
,应该为要在另外两个 TEST_METHOD 中使用的类初始化一次。
然而,当 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"));
}
};
附言我确实看过类似的 this 帖子,但我的问题是 projectDirectory 是一个空字符串,即使是第一个使用该字符串的方法。
解决方法
您的示例代码至少存在一些问题。
-
您在
projectDirectory
中声明了一个局部变量TEST_CLASS_INITIALIZE
,它隐藏了类成员projectDirectory
。 -
TEST_CLASS_INITIALIZE
不能用于初始化类成员(除非它们被声明为静态)。为此,您应该使用TEST_METHOD_INITIALIZE
。