У меня есть фрагмент кода, который мне нужно протестировать, состоящий из 2 частей, сначала состояние нужно установить ровно один раз, затем мне нужно фактически протестировать функцию.
Мой код выглядит так:
static void BM_LoopTime(benchmark::State& state)
{
MasterEngine engine;
for (auto _ : state)
{
engine.LoopOnce();
}
}
BENCHMARK(BM_LoopTime);
В моем выводе я получаю:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Pointer already set
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Несколько раз, что является настраиваемым сообщением об ошибке, указывающим на очень важный указатель, к которому следует прикасаться только после того, как он пытается быть перезаписан.
Вызов этого кода несколько раз является неопределенным поведением в моей реализации. Как я могу вызвать инициализацию объекта ровно один раз, а затем сказать ей вызвать цикл?
MasterEngine
в глобальной области видимости, вероятно, будет правильным решением. Что-то вроде:static MasterEngine* engine() { static MasterEngine eng; return ŋ }
хорошо подойдет для тестов. По сути, это то, что вы делаете с приборами в своем ответе ниже. - person dma   schedule 01.06.2020