Есть ли хороший способ внедрения имитируемых репозиториев с использованием платформы .NET DI? ⇐ C#
Есть ли хороший способ внедрения имитируемых репозиториев с использованием платформы .NET DI?
У меня есть следующий общий репозиторий:
публичный интерфейс IRepository где T: BaseEntity { IMongoQueryable Entities {get; } Task AddAsync (объект T, параметры InsertOneOptions?, CancellationToken cancelToken = default); //... } Используя подход .NET DI, я могу динамически внедрить свой репозиторий в свой контейнер и с легкостью использовать его:
serviceCollection.AddScoped(typeof(Repository), typeof(IRepository)); Это прекрасно работает. Тем не менее, я пытаюсь найти хороший подход к использованию имитируемых репозиториев в своих тестовых примерах. Например, в моих тестовых сценариях есть поставщик услуг, где я могу воспользоваться внедрением зависимостей для получения экземпляров объектов. например:
публичный класс UserService: IUserService { частный IMapper _mapper; частный IRepository _userRepository; частный ValidatorService _userInputValidator; public UserService (сопоставитель IMapper, IRepository userRepository, ValidatorService userInputValidator) { (_mapper, _userRepository, _userInputValidator) = (mapper, userRepository, userInputValidator); } } //... _userService = ServiceProvider.GetRequiredService(); Это тоже работает: я получаю подходящий экземпляр своего класса обслуживания и могу его протестировать. Но в моих тестовых примерах мне бы хотелось избегать этого каждый раз:
_mapper = ServiceProvider.GetRequiredService(); // \/ здесь _userRepositoryMock = новый Mock(); _userInputValidator = ServiceProvider.GetRequiredService(); _userService = новый UserService(_mapper, _userRepositoryMock.Object, _userInputValidator); Вместо того, чтобы создавать макет вручную, я бы хотел использовать DI для определения объема имитируемого репозитория, и всякий раз, когда я запрашиваю свой userService из определенного контейнера, я получаю макетную версию, а не «исходную» реализацию». Что-то вроде :
serviceCollection.AddScoped(typeof(IRepository), new Mock()); Вы уже добились этого/знаете ли вы, как/верите, что это возможно?
У меня есть следующий общий репозиторий:
публичный интерфейс IRepository где T: BaseEntity { IMongoQueryable Entities {get; } Task AddAsync (объект T, параметры InsertOneOptions?, CancellationToken cancelToken = default); //... } Используя подход .NET DI, я могу динамически внедрить свой репозиторий в свой контейнер и с легкостью использовать его:
serviceCollection.AddScoped(typeof(Repository), typeof(IRepository)); Это прекрасно работает. Тем не менее, я пытаюсь найти хороший подход к использованию имитируемых репозиториев в своих тестовых примерах. Например, в моих тестовых сценариях есть поставщик услуг, где я могу воспользоваться внедрением зависимостей для получения экземпляров объектов. например:
публичный класс UserService: IUserService { частный IMapper _mapper; частный IRepository _userRepository; частный ValidatorService _userInputValidator; public UserService (сопоставитель IMapper, IRepository userRepository, ValidatorService userInputValidator) { (_mapper, _userRepository, _userInputValidator) = (mapper, userRepository, userInputValidator); } } //... _userService = ServiceProvider.GetRequiredService(); Это тоже работает: я получаю подходящий экземпляр своего класса обслуживания и могу его протестировать. Но в моих тестовых примерах мне бы хотелось избегать этого каждый раз:
_mapper = ServiceProvider.GetRequiredService(); // \/ здесь _userRepositoryMock = новый Mock(); _userInputValidator = ServiceProvider.GetRequiredService(); _userService = новый UserService(_mapper, _userRepositoryMock.Object, _userInputValidator); Вместо того, чтобы создавать макет вручную, я бы хотел использовать DI для определения объема имитируемого репозитория, и всякий раз, когда я запрашиваю свой userService из определенного контейнера, я получаю макетную версию, а не «исходную» реализацию». Что-то вроде :
serviceCollection.AddScoped(typeof(IRepository), new Mock()); Вы уже добились этого/знаете ли вы, как/верите, что это возможно?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Есть ли хороший способ для модульного тестирования с использованием переменных среды?
Anonymous » » в форуме C# - 0 Ответы
- 14 Просмотры
-
Последнее сообщение Anonymous
-