Абстрактный класс, чтобы иметь любое значение, должен иметь конкретные подклассы, которые могут быть созданы.Так что тестируйте их и неявно через них базовый класс.
Если у него нет конкретных подклассов, я не могу думать ни о какой причине, почему он должен существовать (как абстрактный класс).
В общем, я предпочитаю использовать mocking только для настройки окружения тестируемого класса, а не для создания экземпляра самого класса.Это различие - для меня - делает тестовые случаи более понятными и гарантирует, что я всегда проверяю реальную функциональность класса.
Конечно, я могу думать о случаях (с унаследованным кодом), когда основной проблемой являетсяуметь писать юнит-тесты каким-либо образом, чтобы включить рефакторинг (как описано в Эффективная работа с устаревшим кодом ).В качестве временного решения в таких случаях (почти) все идет.Но после того, как модульные тесты сработают, класс должен быть реорганизован как можно скорее, чтобы сделать его чистым и тестируемым (и его модульные тесты тоже, чтобы сделать их ремонтопригодными).