Когда я начал изучать MS UTF, я успешно написал несколько простых тестов для пары своих занятия. Решение строится и работает правильно. Тесты также проходят как положено. Однако у меня есть выходные данные, которые я не могу объяснить с помощью макросов UTF, TEST_MODULE_INITIALIZE() и TEST_MODULE_CLEANUP():
- В этих макросах я вывожу текст с помощью Logger::WriteMessage(). Вывод обоих правильно отображается в окне вывода IDE (ну, в основном, но это уже другая проблема). Вывод из INITIALIZE также отображается в окне сводной информации о тесте обозревателя тестов, но под первым запуском тестового класса. Вывод последнего отображается только в окне «Вывод». Почему текстовый вывод не связан с TEST_METHOD, появляющимся в его выводе?
- Я использую std::filesystem для определения и отображения current_path (), один раз в каждом из этих макросов. Текущий путь в INITIALIZE — это каталог проекта x64\Debug. Путь в CLEANUP — \Programs\Visual Studio 2022\Common7\IDE\. Почему каталоги разные?
TEST_MODULE_INITIALIZE(ModuleInitialize)
{
Logger::WriteMessage("In Module Initialize\n");
const fs::path deleteLogPath{ fs::current_path() / "TestLog_MSFT.txt" };
if (fs::exists(deleteLogPath))
{
fs::remove(deleteLogPath);
Logger::WriteMessage("\tOld log file deleted in ModuleInitialize in preparation for test\n");
}
}
TEST_MODULE_CLEANUP(ModuleCleanup)
{
Logger::WriteMessage("In Module Cleanup");
const fs::path deleteLogPath{ fs::current_path() / "TestLog_MSFT.txt" };
if (fs::exists(deleteLogPath))
{
Logger::WriteMessage("\tLog file exists");
fs::remove(deleteLogPath);
Logger::WriteMessage("\tOld log file deleted in ModuleCleanup in preparation for next test invocation\n");
}
else
{
Logger::WriteMessage(format("\tOld log file does not exist at {}\n", deleteLogPath.string()).c_str());
}
}
TEST_CLASS(Log_Tests)
{
public:
TEST_METHOD(Log_Constructor_Parameter)
{
Logger::WriteMessage("In Create Log file Test");
fs::path logPath{ fs::current_path() / "TestLog_MSFT.txt" };
Log testLog(logPath, LogCode::INFO);
bool condition = fs::exists(logPath);
Assert::IsTrue(condition);
Logger::WriteMessage("\tPassed: Log file created successfully\t");
Logger::WriteMessage(format("\t{}\n", logPath.string()).c_str());
}
};
Вывод в окне «Вывод» > «Тест» (пути изменены):
In Module Initialize
Old log file deleted in ModuleInitialize in preparation for test
In Create Log file Test
Passed: Log file created successfully
D:\...\WxGenerator\x64\Debug\TestLog_MSFT.txt
In Module Cleanup
Old log file does not exist at D:\...\Common7\IDE\TestLog_MSFT.txt
Подробнее здесь: https://stackoverflow.com/questions/783 ... crepancies