2013-12-18 2 views
1

Я пишу кусок простого класса C++ и стараюсь иметь unittest case для кода.Unittest design pattern для статических функций

Код просто:

class Foo 
{ 

static int EntryFunction(bool flag) 
{ 
    if(flag) 
    { 
     TryDownload(); 
    } 
    else 
    { 
     TryDeleteFile(); 
    } 

    return 0; 
} 

static void TryDownload() 
{ 
    // http download code 
} 

static void TryDeleteFile() 
{ 
    // delete file code 
} 
} 

Выпуск, в соответствии с концепцией UT, мы не можем передать на подключение к сети. Таким образом, unittest не может запустить код загрузки. Моя конечная цель - просто проверить путь кода, например: при переходе в TRUE путь к каталогу загрузки должен быть удалён, иначе логика удаления должна ударить. Я думал переопределить этот класс, поэтому функция загрузки и удаления может быть переопределена, чтобы просто установить флаг и noop, но функции являются статическими.

Мне было интересно, в этом случае, что будет хорошим способом протестировать его?

ответ

0

Одним из способов, которые я могу предложить, является использование библиотеки Google Mock в вашем блоке тестирования модулей.

Используя Google mock library, вы можете сделать именно то, что вы объяснили.

1

Я думаю, это зависит от того, что находится в ваших функциях TryDownload и TryDelete. Если они используют некоторые другие объекты/функции для выполнения своих задач, вы можете настроить имитации этих объектов, чтобы ваши TryDownload и TryDelete не знали их, на самом деле не загружают/не удаляют что-либо.

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