Как написать модульный тест для глобальных функций, где он вызывает другую глобальную функцию, используя gtest / gmock в C ++? - PullRequest
0 голосов
/ 17 ноября 2018

У меня есть около 10 глобальных функций в файле. Нужно написать юнит-тесты для каждого из них. Глобальная функция может быть вызвана из другой глобальной функции.

Можно рассмотреть следующие три глобальные функции.

int bar(int n){
    ..........
    //Could call another global function.
    ..........
}

int foo(int n){
    ..........
    int b = bar(x);
    ..........
}

int hut(int n){
    ..........
    ..........  
    int a = foo(x);
    ..........
    ..........  
    int b = hut(y);
    ..........
    ..........
}

Во время тестирования hut (), функции foo () и bar () должны быть пересмотрены. То же самое может произойти и с foo () и bar (). Я использую gtest и gmock. Можно ли это сделать с помощью gtest и gmock?

Спасибо за чтение.

1 Ответ

0 голосов
/ 19 ноября 2018

Если они находятся в одном и том же файле, то, к сожалению, нет (вменяемого) способа издеваться над этими глобальными функциями.Даже если это не так, вам будет трудно это сделать (например, изменить исходный код на #include фиктивные заголовки вместо реальных при создании кода для модульного тестирования), и он будет не будьте красивыми, поэтому я настоятельно советую вам против этого.

Хотя существует стороннее расширение для добавления глобальной поддержки насмешек, оно только помогает в создании насмешек, нок сожалению, не «как заставить мои функции вместо этого вызывать макет» проблема.

Они охватывают это в этом FAQ и даже предоставляют возможные обходные пути в их блоге - вы можете переписать свой код таким образом, чтобы «избавиться» от статической глобальной функции и сделать ваш код тестируемым.

Короче говоря: Нет, естьнет хорошего и простого способа имитировать глобальные функции (особенно если они вызывают другие глобальные переменные), лучше вместо этого реорганизовать код в нечто более тестируемое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...