Моты по определению имеют тот же тип, что и аргумент или зависимость, которые они заменяют.Таким образом, они являются либо подклассом A (если A является конкретным классом), либо реализацией A (если A является интерфейсом).
Моделирование интерфейсов, как правило, проще, чем моделирование конкретных классов, и выражение зависимостей в терминах интерфейсов, а не конкретных классов, уменьшает сцепление и позволяет упростить моделирование и, следовательно, тестирование.
В вашем случае, посколькуB создает экземпляры A, A - это, конечно, конкретный класс, метод, конечно, возвращает реальный экземпляр A.Все другие экземпляры A могут быть смоделированы, кроме a1, который является частным и недоступен извне (кроме использования мерзких отражений).
Определенно научитесь использовать насмешки и заглушки.Они очень ценны, если вы хотите серьезно относиться к юнит-тестированию.