Я создал небольшой класс RAII, который создает уникальный временный каталог и снова удаляет его после уничтожения. В Linux для достижения этой цели используется mkdtemp()
:
// temporaryDirectoryPath is an std::vector<char>
// containing u8"/tmp/nuclex-pixels-unittest-XXXXXX"
// Let mkdtemp() sort out a unique directory name for us (and create it!)
const char *directoryName = ::mkdtemp(&temporaryDirectoryPath[0]);
if(directoryName == nullptr) {
perror("mkdtemp() failed."); // DEBUGGING. REMOVE.
throw std::runtime_error("mkdtemp() failed.");
}
Это прекрасно работает, когда запускается сам по себе: исполняемый код на ideone.com
Однако, если я использую тот же код внутри GoogleTest 1.8.1 модульного теста, объявленного так:
TEST(MyTestFixture, CanFlumbleTempDirectory) {
TemporaryDirectoryScope temporaryDirectory;
// Could call temporaryDirectory.GetPath() here...
}
Сбой:
Passing the following to mkdtemp(): /tmp/nuclex-pixels-unittest-XXXXXX
mkdtemp() failed.: Invalid argument
Как GoogleTest может мешать mkdtemp()
?