Вы отвечаете на свой вопрос, прежде чем его задать)
При тестировании мокают объекты, чтобы разорвать внешние зависимости.
Необходимо мокать объекты, от которых тестируемый метод зависит, чтобы не тестировать эти самые объекты. Тогда мы будем тестировать только реализацию самого метода. Мы подразумеваем, что эти объекты работают правильно и действую так, как мы того от них ожидаем. Это значит, что мы можем настроить ожидаемое от них поведение.
mock.Setup(x=>x.Users).Returns(new List<Users>(){ ... }
Т.е. мы точно знаем, что при обращении к нашему зависимому объекту через Users нам вернется весь список наших пользователей, причем точно знаем каких. Благодаря абстрагированию от зависимостей, если тестируемый метод провалится, то мы точно будем знать, что виновата реализация метода, а не реализация зависимостей.
В случае тестирования с конкретными зависимыми объектами, мы такого сказать не сможем. Потому что мы точно не можем знать, какие сущности есть в БД, что есть соединение с БД и что сама БД нормально работает.