2015-12-31 3 views
0

Я кодирую на C++, и я тестирую функцию. Однако эта функция имеет набор, поскольку я тестирую его из внешнего исходного файла с помощью GoogleTest. Я не могу придумать способ тестирования в нем определенной локальной переменной. Функция создает переменную указателя класса внутри себя и удаляет ее в конце функции. Если я переместю объявление локальной переменной в .h для общего класса, он отлично работает, и я могу сделать то, что когда-либо хочу для локальной переменной, независимо от ее удаления в конце. Итак, мой вопрос заключается в том, что мне не разрешено изменять исходную настройку, есть ли способ, с помощью которого любой может получить доступ к информации из локальной переменной через какую-то сложную логику или программирование вуду, о которых вы, ребята, знаете? Любые советы приветствуются! Также объект-указатель указывает на методы в своем классе и выполняет манипуляции данными через вход. Пример: pointerA-> setWidth (int, int); Мне нужно добраться до этого указателя в целом.Локальное тестирование блока переменных

foo(int number, int num) { 
    classA* pointerA = new classA; 
    pointerA->setWidth(number, num); 
    //other data manipulations 
    delete pointerA; 
} 

Пример теста:

EXPECT_EQ(pointerA->setWidth(returns width), 2); //checks to see if it returns правильное значение 2

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

+0

Вы должны дать мне [MVCE] (http://stackoverflow.com/help/mcve), потому что я в замешательстве. – erip

+2

Вы, вероятно, должны протестировать внутренний класс отдельно, а затем просто проверить функциональность этой функции правильно, что вы можете наблюдать снаружи. –

+0

@MatsPetersson Я сделал это раньше, чтобы убедиться, что он работает по назначению. Через мое обновление для публикации хочу настроить его для автоматизации, поэтому мне не нужно возвращаться и повторять каждый раз, когда он был изменен. – DimensionalLensing

ответ

1

Вы не должны проверять значение локальной переменной. Это местный. Он не имеет наблюдаемого поведения за пределами внутренней функции и, следовательно, является частью самого блока.

Вместо вы должны проверить, что функция производит правильные выходов для определенных входов. В этом случае это именно то, что вы пытаетесь сделать. & кинжал; Правильный вывод состоит в том, что был сконфигурирован classA, а его «ширина» была правильно установлена ​​тестируемой функцией.

mockingclassA: предоставление альтернативного определения его функций-членов и способ проверки вашего тестового кода его состояния после тестирования.

& dagger;classAне локальная переменная, поэтому вы задаете неправильный вопрос.

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