Могут ли Hippomocks установить ожидания для одного и того же MockRepository в разных исходных файлах?

Я хотел бы, чтобы несколько тестов в нескольких файлах могли вызывать отдельно скомпилированный служебный метод из другого файла, который устанавливает одинаковые ожидания для каждого теста. Однако у 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. Поэтому каждый последующий параметр ожидания в отдельном исходном файле «скрывает» все предыдущие ожидания, установленные с этим индексом.

Кажется, мне нужно включить в качестве встроенного кода все служебные функции, которые устанавливают ожидания, в каждый отдельно скомпилированный исходный файл, что не является хорошим решением. Есть ли другой способ сделать это?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]