История изменений
Исправление spring, (текущая версия) :
Да, это только со временем приходит, никто не имеет врожденных способностей к тестированию, их можно только постепенно развивать. Для данного конкретного случая посмотри на C++ template traits и там еще есть Concepts, они помогают проверять типы на этапе компиляции, например
template <typename CMD,
typename = std::enable_if_t<std::is_base_of_v<ISubstractor, CMD>> >
void randomModifSubtractor(CMD const & m)
{
...
}
при таком подходе код даже тестировать не надо - он просто не соберется если CMD не будет унаследован от ISubstractor. Данный пример примитивный, там очень много других вариантов задания условий, можно в литературе посмотреть.
Но еще раз повторюсь, что подход в лоб не решит такого рода проблему. Тут нужен набор функциональных тестов, с большим покрытием. К тому же такие довески очень сильно влияют на производительность.
Исходная версия spring, :
Да, это только со временем приходит, никто не имеет врожденных способностей к тестированию, их можно только постепенно развивать. Для данного конкретного случая посмотри на C++ template traits и там еще есть Concepts, они помогают проверять типы на этапе компиляции, например
template <typename CMD,
typename = std::enable_if_t<std::is_base_of_v<ISubstractor, MULT>> >
void randomModifSubtractor(CMD const & m)
{
...
}
при таком подходе код даже тестировать не надо - он просто не соберется если CMD не будет унаследован от ISubstractor. Данный пример примитивный, там очень много других вариантов задания условий, можно в литературе посмотреть.
Но еще раз повторюсь, что подход в лоб не решит такого рода проблему. Тут нужен набор функциональных тестов, с большим покрытием. К тому же такие довески очень сильно влияют на производительность.