Я хотел бы знать, если с 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? С другой ложной рамкой?
большое спасибо
Амбруаз Петитгенет
Этот ответ состоит из 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; }
};
Других решений пока нет …