LINUX.ORG.RU

История изменений

Исправление 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. Данный пример примитивный, там очень много других вариантов задания условий, можно в литературе посмотреть.

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