Я исследую использование насмешек для модульных тестов, которые я добавляю в существующий код. Для этого я использую HippoMocks. Это вовлекает другой класс, вызывающий некоторые методы на моем макете (которые все являются виртуальными). Я хочу избежать чрезмерного уточнения всего этого, но HippoMocks продолжают бросать NotImplementedException
всякий раз, когда другой класс вызывает функции на моем макете, которые я не указал.
Код ниже раскрывает мою проблему.
void test()
{
class SimpleClassToMock
{
public:
virtual void memberFunction1() {}
virtual void memberFunction2() {}
};
MockRepository mocks;
// true or false here makes no difference.
mocks.autoExpect = true;
SimpleClassToMock* m = mocks.Mock<SimpleClassToMock>();
// I care about this function getting called.
mocks.ExpectCall(m, SimpleClassToMock::memberFunction1);
m->memberFunction1();
// HippoMocks fails on the next line by throwing NotImplementedException.
m->memberFunction2();
}
Есть ли способ сказать HippoMocks, чтобы не потерпеть неудачу здесь? Я только хочу указать ожидания для вещей, которые мне небезразличны для конкретного теста, а не для каждой отдельной вещи, которая называется.
PS: Для тех, у кого есть опыт насмешки, я не думаю, что все это неправильно? Является ли чрезмерное уточнение теста в таких случаях, это не проблема / «что вы хотите»?
Чтобы избежать чрезмерного уточнения, вы можете использовать OnCall
чтобы их можно было вызывать 0-N раз (опционально с проверкой аргументов, проверкой порядка и т. д.).
Других решений пока нет …