Комментарии 17
isEquals
— это странное название. Либо isEqual
либо Equals
fuse_gtest_files.py, он создаст 2 файла: cpp, hpp и можно подключать gtest к проекту станет достаточно простым делом.
А почему не… ?
std::cout << serializer << core().collect() << std::endl;
collect()
принимает сериализатор и говорит ему какой массив нужно преобразовать, поэтому синтаксис выше будет некорректным или просто странноватым. Как вариант, можно задать сериализатор и сделать std::cout << core() << std::endl;
, но это, на мой взгляд, как-то не удобно.
Возможно, стоит переименовать метод во что-то более говорящее, но в голову не пришло такое слово.
Так меня именно это и удивляет. Почему вдруг collect()
принимает сериализатор? Где core
и где сериализатор? Зачем они так тесно связаны? У core
должен быть некий метод, который отдаёт голенькие данные. И вот эти вот данные уже ловит сериализатор, к которому в результате выполнения первого <<
уже прилип std::cout
. Т.е. на тот момент, когда в сериализатор попадают данные из core
, он уже готов выводить их в конкретный поток. Более того, из метода, собирающего данные, можно возвращать не сразу сами данные, а просто фьючер со ссылкой на них. При раскрытии этого фьючера внутри сериализатора автоматом произойдёт отложенный сбор данных.
Module(u8"Some module 2", DOCK_MODULE {
//some code
});
А сам макрос DOCK_MODULE не сделать таким:
DOCK_MODULE [](dock::_internal::Module* _dock_module)
Конечно никто мне не мешает самому написать подобную обертку, просто интересует причина подобного решения. Может быть это как-то используется, но не показано в статье?
Пробовал так делать изначально, оставались вообще фигурные скобки и то, что внутри (Module
тоже ведь макрос, поэтому я могу сразу в нем все скрыть):
Module(u8"Module name", {
// ...
});
Но в таком варианте почему-то ломались автоотступы в VS2015/VS2017, т.е. все блоки Test
были без отступов вообще. Чтобы не раздражало пришлось перейти на менее читабельный и компактный вид.
По моему, этого обычно мало.
Зачастую тест содержит не один ассерт, а несколько. Как понять, кто из них сработал?
Как понять, какие значения ожидались, а какие там были на самом деле?
Как вывести дополнительную информацию о контексте ассерта?
Так только старт же, по мере необходимости буду добавлять фичи :) Пока что мне нужно было что-то очень простое, что может выдавать результат в json, и эта потребность у меня закрылась. Может быть, кому-то еще пригодится такой простой движок, поэтому я и поделился им.
Иначе он будет мало полезен остальным.
Тогда встанет вопрос — пользоваться Вашим кодом, или протестированной либой с историей, тестами и поддержкой разных платформ, от крупного сообщества.
В любом случае, Вам — удачи, но я бы задумался над тем, чтобы попробовать заслать в апстрим то, что было нужно вместо велосипедостроения.
GTest, например, не так уж плоха.
static void isTrue(std::function<bool()> fcn);
чтобы все было пареллельно и перпендикулярно — надо позволить пользователю вычислять значение из тестируемого контекста, а не просто брать из ниоткуда?
templatestatic void isTrue(const T v, std::function<bool(const T&)> fcn = defaultIsTrueFunction());
1. Пометить тест как skiped?
2. Запустить только те что упали в прошлый раз?
3. Запустить тесты в рандомном порядке?
4. Запустить тесты несколько раз?
dock: простая библиотека модульного тестирования кода на С++