Проблема этого когда не в том, что массив конвертируется в указатель, а то, что тут подразумевается массив на значения B, а не ссылки/указатели. Соответственно код даже знать не может о наследниках и по факту обрежет значения. Массивы на базовый класс передаются как B **b - аналог B *b[].
Для таких случаев ещё есть способ с преобразованием исключения реализации в исключение абстракции. Т.е. вместо выбрасывания наружу SqlException нужно преобразовать его во что-то вроде RepositoryException стерев тем самым данные о внутренней реализации и в тестах проверять уже исключение абстракции
Проблема этого когда не в том, что массив конвертируется в указатель, а то, что тут подразумевается массив на значения B, а не ссылки/указатели. Соответственно код даже знать не может о наследниках и по факту обрежет значения. Массивы на базовый класс передаются как B **b - аналог B *b[].
Для таких случаев ещё есть способ с преобразованием исключения реализации в исключение абстракции. Т.е. вместо выбрасывания наружу SqlException нужно преобразовать его во что-то вроде RepositoryException стерев тем самым данные о внутренней реализации и в тестах проверять уже исключение абстракции
Почему при обработке Вас интересует именно полное отсутствие аргументов, а не их достаточное количество?
Вы предпочитаете уронить приложение путём возврата кода возврата, нежели обрабатывать исключения? К тому же вывод ошибок в stdout вместо stderr.
Выделение класса Connection, конечно хорошо, но пихать туда почти всю логику явно перебор. Стоило разбить сущности.