2008-10-21 3 views
9

Мой вопрос весьма важен для something asked before, но мне нужен практический совет.Добавление модульных испытаний к существующему проекту

У меня есть «Работа с устаревшим кодом» в моих руках, и я использую совет из книги, когда я прочитал ее в проекте, над которым я работаю. Проект представляет собой приложение на C++, состоящее из нескольких библиотек, но основная часть кода скомпилирована в один исполняемый файл. Я использую googletest для добавления модульных тестов к существующему коду, когда мне нужно что-то прикоснуться.

Моя проблема заключается в том, как я могу настроить мой процесс сборки, чтобы я мог строить свои модульные тесты, так как есть два разных исполняемых файла, которым необходимо обмениваться кодом, пока я не могу извлечь код из моего приложения «under test» библиотека. Прямо сейчас я сделал свой процесс сборки для приложения, которое связывает узловые тесты с объектными файлами, созданными в процессе сборки основного приложения, но мне это очень не нравится. Есть ли предложения?

ответ

1

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

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

2

Working Effectively With Legacy Code - лучший ресурс для запуска тестирования старого кода. На самом деле нет краткосрочных решений, которые не приведут к ухудшению ситуации.

0

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

Престижность к вам и удача в тестировании.

0

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

Я заставляю библиотеки зависеть от всех тестов. Надеюсь, это означает, что ваши тесты выполняются только тогда, когда код действительно изменяется.

Если вы получите отказ, тесты прервут процесс сборки в нужном месте.

+0

Почему голос? – 2009-03-04 19:43:11

2

Я обрисовать структуру Makefile вы можете использовать:

all: tests executables 

run-tests: tests 
    <commands to run the test suite> 

executables: <file list> 
    <commands to build the files> 

tests: unit-test1 unit-test2 etc 

unit-test1: ,files that are required for your unit-test1> 
    <commands to build unit-test1> 

Это примерно то, что я делаю, как единственный разработчик на моем проекте