Унаследованный код Поблочного тестирования C++: Как обработать #include?

После долгих поисков и поисков, я нашел способ сделать то, что хочу.

Вы должны использовать Bootstrap.css, Bootstrap.js, jQuery.js и Popper.js.

Также вы должны установить crossorigin="anonymous"




Также об использовании скриптов Java вы можете использовать его следующим образом: (как указано здесь - сайт начальной загрузки )




Вот меню:


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

17
задан MasD 15 September 2008 в 17:47
поделиться

6 ответов

Депрессия в ответах является подавляющей... Но не бойтесь, мы имеем святая книга для изгнания демонов кода C++ прежней версии . Серьезно просто купите книгу, если Вы в гармонии больше недели соперничания с кодом C++ прежней версии.

Поворот к странице 127: случай ужасного включают зависимости. (Теперь я даже не в милях Michael Feathers, но здесь as-short-as-I-could-manage ответ..)

проблема : В C++, если classA должен знать о ClassB, объявление Класса B прямо снято / дословно включенный в исходный файл ClassA. И так как среди нас, программисты любят брать его к неправильному экстремальному значению, файл, может рекурсивно быть огромное количество других transitively. Сборки занимают годы.. но эй по крайней мере это создает.. мы можем ожидать.

Теперь для высказывания 'инстанцирования ClassA под тестовой обвязкой является трудным', преуменьшение. (Заключение в кавычки примера MF - Планировщик является нашим трудным ребенком плаката с deps в изобилии.)

#include "TestHarness.h"
#include "Scheduler.h"
TEST(create, Scheduler)     // your fave C++ test framework macro
{
  Scheduler scheduler("fred");
}

Это произведет, включает дракона с волнением ошибок сборки.
Patience-n-Persistence Blow#1 : Возьмите каждый включает по одному и решает, нужна ли нам действительно та зависимость. Давайте предположим, что SchedulerDisplay является одним из них, displayEntry метод которых называют в ctor Планировщика.
Blow#2 Fake-it-till-you-make-it (Спасибо RonJ):

#include "TestHarness.h"
#include "Scheduler.h"
void SchedulerDisplay::displayEntry(const string& entryDescription) {}
TEST(create, Scheduler)
{
  Scheduler scheduler("fred");
}

И поп идет зависимость и все, что его переходное включает. Можно также снова использовать Поддельные методы путем инкапсуляции его в файле Fakes.h, который будет включен в тестовые файлы.
Практика Blow#3 : Это не может быть всегда настолько просто.. но Вы получаете идею. После первых нескольких поединков процесс повреждения deps получит протесты easy-n-mechanical

(Я упоминал, что существуют протесты?:)

  • Нам нужна отдельная сборка для тестовых сценариев в этом файле; у нас может быть только 1 определение для SchedulerDisplay:: метод displayEntry в программе. Поэтому создайте отдельную программу для тестов планировщика.
  • Мы не повреждаем зависимостей в программе, таким образом, мы не делаем инструмент для очистки кода.
  • необходимо поддержать те фальшивки, пока нам нужны тесты.
  • Ваш смысл эстетики может быть нарушен некоторое время.. просто укусите свой выступ, и 'терпят нас для лучшего завтра'

Использование эта техника для очень огромного класса с серьезными проблемами зависимости. Не используйте часто или слегка.. Использование это как начальная точка для более глубоких рефакторингов. Со временем эта программа тестирования может быть взята позади сарая, поскольку Вы извлекаете больше классов (С их собственными тестами).

Для больше.. прочитайте книгу. Неоценимый. Борьба на брате!

9
ответ дан 30 November 2019 в 14:29
поделиться

Так как Вы тестируете унаследованный код, я предполагаю, что Вы не можете осуществить рефакторинг, сказал код для имения меньшего количества зависимостей (например, при помощи pimpl идиома )

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

1
ответ дан 30 November 2019 в 14:29
поделиться

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

После продвижения команды XP на проекте разработки зеленого поля я действительно любил свои Модульные тесты. Вещи произошли, и несколько лет спустя я работаю над большой основой унаследованного кода, которая имеет много качественных проблем.

я пытался найти способ добавить, что тесты единиц к приложению, но в конце просто застряли в уловке - 22:

  1. для записи значения полных модульных тестов, код должен был бы быть пересмотрен.
  2. Без модульных тестов будет слишком опасно осуществить рефакторинг код.

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

Иногда просто лучше работать над кодом в пути, который "разработан", чтобы работаться на.

1
ответ дан 30 November 2019 в 14:29
поделиться

Я не знаю, будет ли это работать на Ваш проект, но Вы могли бы попытаться приняться за решение проблемы от фаза ссылки Вашей сборки.

Это полностью устранило бы Вашу #include проблему. Все, что необходимо было бы сделать, повторно реализовать интерфейсы во включенных файлах, чтобы сделать то, что когда-либо Вы хотите и затем просто связываете с файлами фиктивного объекта, которые Вы создали для реализации интерфейсов во включать файле.

большой недостаток к этому методу является более соединенной системой сборки.

1
ответ дан 30 November 2019 в 14:29
поделиться

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

, Но если те включают, там и не имеют никакого добавленного поведения тогда, это в порядке.

я попытался бы ничего не изменить на том, чтобы включать при выполнении поблочного тестирования, таким образом, Вы уверены (как далеко, можно быть на унаследованном коде:)), что Вы тестирующий реальный код.

0
ответ дан 30 November 2019 в 14:29
поделиться

Вы определенно в безвыходном положении с унаследованным кодом с большими зависимостями. У Вас есть длинный сильный удар вперед для улаживания всего этого.

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

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

0
ответ дан 30 November 2019 в 14:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: