Начал изучать CppUnit и не могу понять как сделать хорошо.
Условие: конструктор класса может кинуть исключение. Это и хочется оттестировать.
Создал 2 метода: wrongConstructor1/2, которые проверяют нижнию и верхнюю границу.
Но как-то это не хорошо: если появится второй аргумент (хотябы bool), то придётся добавлять ещё 2 метода.
Здравствуйте, f123456, Вы писали:
F>Начал изучать CppUnit и не могу понять как сделать хорошо.
F>Или есть другой паттерн, который может параметризовать вызовы wrongConstructor() ?
Здравствуйте, f123456, Вы писали:
F>Начал изучать CppUnit и не могу понять как сделать хорошо. F>Условие: конструктор класса может кинуть исключение. Это и хочется оттестировать. F>Создал 2 метода: wrongConstructor1/2, которые проверяют нижнию и верхнюю границу. F>Но как-то это не хорошо: если появится второй аргумент (хотябы bool), то придётся добавлять ещё 2 метода.
Есть такой подход — называйте тесты согласно тому, что они проверяют. Названия должны быть _утверждениями_, касающимися проектируемой системы. Тогда и в случае развала теста вы в логах увидите, что именно перестало работать. Поэтому добавить новые два метода — это вполне нормально.
Пример:
Больщое спасибо за этот пример. Теперь мне понятно, как можно поставить обработку нескольких исключения в методе: отпала необходимость его параметризировать. =)
Единственное, что компилятор не даёт вставлять std::exception: выдаёт ошибку
error C2312: 'const std::exception &' : is caught by 'const std::exception &' on line 27
Но это легко лечится указанием на std::runtime_error.
Здравствуйте, f123456, Вы писали:
F>Единственное, что компилятор не даёт вставлять std::exception:
Действительно, к сожалению, CPPUNIT в своих макросах уже использует этот тип исключения
Скромное субъективное мнение: старайтесь в названиях каждого теста описывать утверждения без императива. Чем декларативнее будет название теста, тем качественнее будет ошибка при развале и общее впечатление от кода.
название теста не должно отражать что он тестирует, оно должно описывать качество вашей системы. сравните:
"проверить конструктор на граничных условиях" и "запрещено создавать объект вне диапазона размерности"
Ну и старайтесь избегать глобальные переменные типа g_nMaxBoardDim Они делают код нетестируемым (имеется в виду общее качество тестов снижается, к ним меньше доверия ибо тесты не полностью контролируют юнит). Юниты должны быть обособлены от внешнего мира. Всё, что нужно для работы юнита, должно передаваться им на вход.
Успехов.