Изменение поддельного репозитория для модульного тестирования при использовании внедрения зависимостей - PullRequest
0 голосов
/ 30 сентября 2011

В моей программе есть ситуация, которую я могу упростить до следующего:

  • IRepository, в котором я создаю MemoryRepository и реализацию SqlRepository
  • Mapper, который получаетВведен конструктор IRepository.
  • Mapper.Map (), который содержит бизнес-логику, которую я хочу проверить

Я создал тест, в котором Mapper получает MemoryRepository.Явно установив свойство в хранилище памяти, которое будет использоваться в бизнес-логике, теперь я могу проверить эту логику.Однако, если я использую инъекцию, у меня больше не будет доступа к этому хранилищу.

Небольшой фрагмент кода сообщает вам более 1000 нормальных слов, здесь - ссылка на вставку .

Как бы вы поступили об этом?

Ответы [ 2 ]

1 голос
/ 07 октября 2011

Если я правильно понимаю ваш вопрос, в основном вы обеспокоены тем, что ваш репозиторий был создан И внедрен, когда был создан экземпляр тестового класса, и поэтому в вашем тестовом методе вы не можете изменить состояние своего репозитория, поскольку он уже находится внутри вашего преобразователя Конечно, ваш картограф не должен раскрывать внутренности репозитория.

Если это так, то я не думаю, что вам нужно беспокоиться, просто измените состояние myMemoryCategoryRepository и выполните метод картографа. Ваш маппер должен вести себя соответствующим образом, потому что то, что вы ввели, является ссылкой на хранилище, поэтому объект внутри маппера такой же, как тот, который вы бы модифицировали.

Dim myMemoryCategoryRepository As MemoryCategoryRepository = MemoryKernel.Instance.Get(Of MemoryCategoryRepository)()
Dim myCategoryMapper As CategoryMapper = New CategoryMapper(myMemoryCategoryRepository)

<TestMethod()> _
    Public Sub GetCategoryStartDate_CategoryStartDateAndContractStartDate_ContractStartDateIsOldestDate()

   myMemoryCategoryRepository.AnyFlag = True
   myCategoryMapper.Execute()
   Assert.AreEqual(expectedValue, myCategoryMapper.Value)
End Sub
1 голос
/ 30 сентября 2011

Не совсем уверен, что вы спрашиваете здесь, вы тестируете маппер или репозиторий?Если вы тестируете маппер, то подделайте репозиторий.У вас уже есть швы, либо используйте фреймворк, либо создайте в ваших тестах фальшивое хранилище, которое создаст любые счастливые звуки, которые вы хотите, для тестирования Mapper и создайте mapper, передав свою фальшивку в конструктор.

Итак, по вашему собственному упрощению,

  • Создайте поддельный репозиторий, унаследованный от IRepository
  • Внедрите подделку в ваш Mapper, который вы собираетесь тестировать
  • Test Mapper.Map ()

Если вам необходимо проверить некоторую информацию в репозитории, используйте вместо заглушки макет.

Разница между заглушками и заглушками

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...