2016-10-28 11 views
4

Если я хочу написать свой собственный test.cpp, который проверяет, выводит ли другой .cpp-файл так, как я хочу его выводить, есть ли способ сделать это без явной печати?Исправлена ​​ошибка проверки модульного тестирования C++

Другими словами, существует ли что-нибудь, например, как

assert(output_of_file_being_tested, "this is the correct output"); 

где output_of_file_being_tested является то, что это должно быть «соиЬ» под ред.

+1

Вы можете сделать что-то похожее на это: http://stackoverflow.com/questions/10150468/how-to-redirect-cin-and-cout-to-files –

+2

Код более подвержен проверке, если вы избегаете писать такие вещи, как 'std :: cout' непосредственно и напишите в 'std :: ostream &' ссылки. Затем структура тестирования может проходить в объектах 'std :: ostringstream', тогда как приложение переходит в' std :: cout'. – Galik

ответ

6

Решение не должно жестко кодировать выходной поток. Отправьте ссылку на std::ostream на ваш код, и используйте std::stringstream для сбора результатов в тестовой среде.

Например, это содержание файла "другой .cpp":

void toBeTested(std::ostream& output) { 
     output << "this is the correct output"; 
} 

Так что в вашем рабочем коде/выпуска вы можете передать std::cout функции:

void productionCode() { 
     toBeTested(std::cout); 
} 

в то время как в тестовой среде вы можете собрать выход в поток обжига и проверить его на правильность:

// test.cpp 
#include <sstream> 
#include <cassert> 

void test() { 
     std::stringstream ss; 
     toBeTested(ss); 
     assert(ss.str() == "this is the correct output"); 
}