Я долгое время скрываюсь на доске, и нет необходимости говорить, что вы, ребята, самые лучшие, и я благодарен за все, что вы сохранили на моей работе. Это мой первый пост здесь, и я надеюсь, что я его не испортил.Черепаха Mock: MOCK_EXPECT терпит неудачу, если метод классного класса возвращает значение
Я пишу приложение C++ Boost для Linux (Virtualized Ubuntu 16.04 amd_64), и я использую Turtle Mock для насмешливой структуры и Boost Test для платформы тестирования. Когда я пытаюсь протестировать класс, который использует метод инъекции зависимостей, я издеваюсь над классами, которые должны быть переданы классу тестирования, поэтому я могу проверить последовательность их вызова. Да, так хорошо, но проблема здесь. Я использую MOCK_BASE_CLASS (MockAClass, AClass), чтобы переопределить виртуальные методы реального AClass и использовать для нового MockAClass, чтобы продолжить мои тесты. Предположим, что AClass имеет виртуальный метод int getTest (int), а MockAClass имеет MOCK_METHOD (getTest, 1, int (int)), после установки ожидаемого и возвращаемого значения для метода getTest объекта MockAClass и вызова метода, математическое ожидание которого в большинстве случаев MOCK_EXPECT (objMockAClass.getTest) .at_least (1) НИКОГДА не проверяется. Я могу контролировать возвращаемое значение, но вызов никогда не проверяется, как это произошло. Это происходит только в том случае, если функция возвращает значение (например, если функция void getTest (int), то проверка будет проходить).
Я устанавливаю простой PoC моей проблемы, который не будет работать в моей системе.
class AClass
{
public:
virtual int getTest(int a) {return 0}
}
MOCK_BASE_CLASS (MockAClass, AClass)
{
MOCK_METHOD(getTest, 1, int(int));
}
BOOST_AUTО_TEST_CASE(SomeClassFunctionality)
{
MockAClass objMockAClass;
MOCK_EXPECT(objMockAClass.getTest).returns(1);
MOCK_EXPECT(objMockAClass.getTest).at_least(1);
objMockAClass.getTest(1);
}
Да, это правильно. Он обрабатывает их как два отдельных взаимоисключающих утверждения, и именно поэтому он терпит неудачу. Спасибо за поддержку. :) –