фиктивный беда - PullRequest
       27

фиктивный беда

4 голосов
/ 03 декабря 2011

У нас есть следующая проблема: ряд классов, к которым мы не можем прикоснуться, но которым необходимо их модульное тестирование. К сожалению, классы не предназначены для модульного тестирования, поэтому мы создаем фиктивные объекты для тестирования кода.

Пример:

class SomeOtherClass
{
public:
void foo2() {  … }
};

class ClassToTest
{
public:
ClassToTest() {…}
void foo1() { SomeOtherClass A.foo2(); }
};

В приведенном выше примере мы хотели бы протестировать foo1(), но для этого нужно foo2(), поэтому мы хотели бы сделать foo2() принадлежащим фиктивному объекту (в реальной жизни эти функции/ классы значительно более сложны и включают взаимодействие с аппаратными конфигурациями и т. д., следовательно, потребность в фиктивных объектах / функциях).

До сих пор мы делали что-то подобное, но это на самом деле не оптимально, поскольку кажется, что код оказывает побочные эффекты на другие модульные тесты.

class MockSomeOtherClass
{
public:
  foo2() { … } // mock function
};

#define SomeOtherClass MockSomeOtherClass

#include “ClassToTest.cpp”
...

Есть ли лучший способ сделать этобез изменения оригинальных классов (или с минимальными изменениями)?Для тестирования мы используем CPPUnit.

EDIT: добавлен тег winapi для более четкого описания среды.

1 Ответ

2 голосов
/ 03 декабря 2011

Существует продукт под названием Typemock Isolator ++ , предназначенный для решения возникших проблем. Я еще не пробовал, поэтому не могу комментировать, насколько хорошо это работает или насколько легко / сложно его использовать.

К сожалению, вы должны дать им свой адрес электронной почты, чтобы попробовать. Загрузка достаточно проста, но затем вы будете перенаправлены на эту страницу , которая радостно направляет вас: «Зарегистрируйте свое программное обеспечение сейчас, чтобы получить БЕСПЛАТНУЮ пробную версию! Пожалуйста, введите свои данные, включая действительный адрес электронной почты, чтобы получить активацию». ключ, чтобы начать использовать Isolator ++. "

...