После долгих поисков и поисков, я нашел способ сделать то, что хочу.
Вы должны использовать Bootstrap.css
, Bootstrap.js
, jQuery.js
и Popper.js
.
Также вы должны установить crossorigin="anonymous"
Также об использовании скриптов Java вы можете использовать его следующим образом: (как указано здесь - сайт начальной загрузки )
Вот меню:
Я надеюсь, что это поможет некоторым людям, потому что я нашел пару вопросов, похожих на мой.
Депрессия в ответах является подавляющей... Но не бойтесь, мы имеем святая книга для изгнания демонов кода 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
(Я упоминал, что существуют протесты?:)
Использование эта техника для очень огромного класса с серьезными проблемами зависимости. Не используйте часто или слегка.. Использование это как начальная точка для более глубоких рефакторингов. Со временем эта программа тестирования может быть взята позади сарая, поскольку Вы извлекаете больше классов (С их собственными тестами).
Для больше.. прочитайте книгу. Неоценимый. Борьба на брате!
Так как Вы тестируете унаследованный код, я предполагаю, что Вы не можете осуществить рефакторинг, сказал код для имения меньшего количества зависимостей (например, при помощи pimpl идиома )
, Который оставляет Вас с небольшими опциями, я боюсь. Для каждого заголовка, который был включен для типа или функции, будут нужны фиктивный объект для того типа или функция для всего для компиляции, существует мало, можно сделать...
Я не отвечаю на Ваш вопрос непосредственно, но я боюсь, что поблочное тестирование просто не может состоять нужно в том, если Вы работаете с большими суммами унаследованного кода.
После продвижения команды XP на проекте разработки зеленого поля я действительно любил свои Модульные тесты. Вещи произошли, и несколько лет спустя я работаю над большой основой унаследованного кода, которая имеет много качественных проблем.
я пытался найти способ добавить, что тесты единиц к приложению, но в конце просто застряли в уловке - 22:
, Если Вы чувствуете себя подобно герою и пьете прохладную помощь на поблочном тестировании тогда, можно все еще дать ему попытку, но существует реальный риск, что Вы заканчиваете только с большим количеством тестового кода небольшого значения, которое теперь также должно сохраняться.
Иногда просто лучше работать над кодом в пути, который "разработан", чтобы работаться на.
Я не знаю, будет ли это работать на Ваш проект, но Вы могли бы попытаться приняться за решение проблемы от фаза ссылки Вашей сборки.
Это полностью устранило бы Вашу #include проблему. Все, что необходимо было бы сделать, повторно реализовать интерфейсы во включенных файлах, чтобы сделать то, что когда-либо Вы хотите и затем просто связываете с файлами фиктивного объекта, которые Вы создали для реализации интерфейсов во включать файле.
большой недостаток к этому методу является более соединенной системой сборки.
Если Вы продолжаете писать, что тупики/насмешка/фальшивка кодируют Вас, рискуют делать поблочное тестирование на классе, который имеет различное поведение тогда, когда скомпилировано на основном проекте.
, Но если те включают, там и не имеют никакого добавленного поведения тогда, это в порядке.
я попытался бы ничего не изменить на том, чтобы включать при выполнении поблочного тестирования, таким образом, Вы уверены (как далеко, можно быть на унаследованном коде:)), что Вы тестирующий реальный код.
Вы определенно в безвыходном положении с унаследованным кодом с большими зависимостями. У Вас есть длинный сильный удар вперед для улаживания всего этого.
Из того, что Вы говорите, кажется, что Вы пытаетесь сохранить исходный код в целости для каждого модуля в свою очередь, помещая его в тестовую обвязку с внешними зависимостями, которые дразнят. Мое предложение здесь должно было бы сделать еще более храбрый шаг попытки некоторого рефакторинга для устранения (или инвертирование ) зависимостей, который является, вероятно, самым шагом, которого Вы стараетесь избегать.
я предлагаю это, потому что я предполагаю, что зависимости собираются уничтожить Вас как Вас тесты записи. Вы, конечно, будете более обеспечены в долгосрочной перспективе, если можно устранить зависимости.