2009-04-03 2 views
0

Я пытаюсь настроить некоторые модульные тесты для существующего проекта C++.Единичное тестирование и издевательствование небольших, значащих классов в C++

Вот установка: Я выбрал Google Mock, в который входит Google Test. Я добавил еще один проект (называемый Tests) в решение Visual Studio. Единицы для тестирования находятся в другом проекте под названием Main. План состоит в том, чтобы добавить каждый файл cpp, который я хочу протестировать в проекте Tests. Проект Tests имеет доступ ко всем файлам заголовков из Main.

Я добавил один файл cpp в проект Tests, и он компилируется, но появляется ошибки компоновщика. Большинство из них связаны с классом, производным от COleDateTime, называемым CTimeValue. У тестируемого устройства есть методы с параметрами CTimeValue с параметрами pass-by-value, а также объявляются некоторые атрибуты CTimeValue.

Я хочу протестировать UUT изолированно и использовать издевательства и подделки для всех зависимостей. Я не вижу, как это сделать с помощью CTimeValue. Он используется как ценность, не содержит виртуальных методов, но все еще довольно сложный и заслуживает отдельного модульного теста.

CTimeValue - это только один из многих классов, который подобен этому в проекте. Как я могу изолировать тестирование классов, которые используют эти пользовательские типы?

Cheers, Felix

ответ

3

Иногда один не может просто фиктивные вещи. В этом случае то, что вы можете сделать, это провести всесторонний тест для рассматриваемого класса (CTimeValue) и убедиться, что вы выполняете тесты для этого класса в качестве подмножества в своем другом тесте.

+0

Это должно будет сделать, спасибо за ответ. Mocks, похоже, не работают хорошо с семантикой стоимости. – TheFogger

0

Используя макетный объект, вам нужно только добавить сигнатуры методов, которые использует ваш UUT, поэтому, возможно, вы можете создать макет с использованием Google Mock. Конечно, для класса CTimeValue вам понадобится отдельный набор тестов, и если у вас есть это, то, вероятно, лучше связать его с фактическим объектом. Вам нужно решить, стоит ли создавать класс интерфейса для создания макета.

0

Mocks наиболее подходит для работы с объектами, которые предоставляют услуги друг другу, а ожидания от макетов описывают их отношения. Там нет особого смысла в насмешливых объектах ценности.

Смежные вопросы