Я хотел бы, чтобы несколько тестов в нескольких файлах могли вызывать отдельно скомпилированный служебный метод из другого файла, который устанавливает одинаковые ожидания для каждого теста. Однако у Hippomocks, похоже, есть проблема с установкой ожиданий для одного и того же MockRepository в разных исходных файлах.
Вот простой пример:
file1.cpp это:
void SetOtherExpectations(MockRepository &mocks);
int Method45()
{
return -45;
}
int Method88()
{
return -88;
}
TEST(TestOfSettingValueInAnotherSourceFile)
{
MockRepository mocks;
mocks.OnCallFunc(Method45).Return(45);
mocks.OnCallFunc(Method88).Return(88);
SetOtherExpectations(mocks);
testEqual(45, Method45()); // Failed Condition: (Expected: <45>, actual: <8888>
}
file2.cpp это:
int MethodInt(int)
{
return -145;
}
int MethodChar(char)
{
return -188;
}
void SetOtherExpectations(testFramework::MockRepository &mocks)
{
mocks.OnCallFunc(MethodChar).Return(8888); // Line A
mocks.OnCallFunc(MethodInt).Return(9999); // Line B
}
Если я поменяю местами строки A и B, вызов Method45 теперь возвращает 9999. Оказывается, что при вызове Method45 поиск ожидающего совпадения находит первую поддельную функцию в file2, прежде чем он находит правильную смоделированную функцию из file1.
В MockRepository есть 4 ложных метода, но Hippomocks назначает funcIndex
значение для каждого исходного файла, так как он использует __COUNTER__
Переменная препроцессора (которая начинается с 0 в каждом исходном файле и увеличивается на 1 каждый раз, когда она используется в этом исходном файле) в вызовах RegisterExpect. Поэтому каждый последующий параметр ожидания в отдельном исходном файле «скрывает» все предыдущие ожидания, установленные с этим индексом.
Кажется, мне нужно включить в качестве встроенного кода все служебные функции, которые устанавливают ожидания, в каждый отдельно скомпилированный исходный файл, что не является хорошим решением. Есть ли другой способ сделать это?
Задача ещё не решена.
Других решений пока нет …