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