HippoMock: издевательство только часть класса

Я хотел бы знать, если с HippoMock можно издеваться над частью класса.

пример

class aClass
{
public:
virtual void method1() = 0;

void method2(){
do
doSomething;      // not a functon
method1();
while(condition);
};
};

Я хотел бы издеваться только method1, чтобы проверить метод 2

Очевидно, что я использую HippoMock, и у меня есть ошибка в method2, поэтому я сделал модульный тест, чтобы исправить его и быть уверенным, что он не вернется. Но я не нахожу способ сделать это.

Я пытаюсь это

TEST(testMethod2)
{
MockRepository mock;
aClass *obj = mock.Mock<aClass>();
mock.ExpectCall(obj , CPXDetector::method1);
obj->method2();
}

Есть ли какое-то решение в нативном cpp? С другой ложной рамкой?

большое спасибо

Амбруаз Петитгенет

3

Решение

Этот ответ состоит из 2 частей. Во-первых, да, это легко сделать. Во-вторых, если вам нужно структурировать тест таким образом, у вас часто бывает неудачный дизайн класса — это обычно происходит, когда вам нужно тестировать устаревшее программное обеспечение, когда дизайн класса не может быть разумно исправлен.

Как это проверить? Насколько я помню, вы можете использовать Hippomocks для этого, но поскольку я не использовал его в течение некоторого времени, я не помню, как изо всех сил, как это сделать. Поскольку вы запрашивали какое-либо решение, даже те, которые используют другую среду, я предлагаю использовать прямой подход вместо использования гиппопотамов:

class bClass : public aClass
{
int _counter;
public:
bClass() : aClass(), _counter(0){}
void method1() { _counter++; }
int NumCallsToMethod1() const { return _counter; }
};

TEST(testMethod2)
{
bClass testThis;
testThis.method2();
TEST_EQUALS(1,testThis.NumCallsToMethod1());
}

или если method1 является const:

class bClass : public aClass
{
mutable int _counter;
public:
bClass() : aClass(), _counter(0){}
void method1() const { _counter++; }
int NumCallsToMethod1() const { return _counter; }
};
1

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

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

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