Дразнить метод и возвращать разные результаты - PullRequest
0 голосов
/ 16 июля 2010

У меня есть метод, который немного сложен и нуждается в очень хорошем тестировании. Секретный соус. Хорошо, может быть, не так круто, но я не уверен на 100%, как настроить эти вещи. Этот вид проистекает из моего предыдущего вопроса здесь . Я не использовал насмешки на носорогов, так что я все еще плохо знаю синтаксис, поэтому не стесняйтесь вносить массу предложений.

Public Function GenerateAllNotifications(ByVal days As List(Of Integer)) As List(Of MailMessage) Implements INotificationService.GenerateAllNotifications

     Dim someStuff = _someService.GetThingsThatExpireBetween(day1, day2)

     'build some messages

     Return messages

End Function

Мои настройки в моих тестах выглядят так ... Хотя я знаю, что это неправильно

Dim fakeStuff = New SomeItem()

Dim fakeContext = New List(Of Provider)
fakeContext.Add(fakeStuff)
Dim someService = MockRepository.GenerateStub(Of ISomeService)()
someService.Stub(Function(x) x.GetThingsThatExpireBetween(30, 60)).IgnoreArguments().Return(fakeContext.AsQueryable)
_fakeNotificationService = New NotificationService(someService)

Что я хочу сделать, так это вернуть выполненные предметы из этой службы. Бизнес-правило - это набор сообщений, основанный на данном истечении срока действия. Таким образом, если срок действия данной сущности истекает через 30 дней, в сообщении отражается, что, если это 60, 90, что угодно, они помещаются в сообщения. Я думаю, что моя проблема в том, что мне нужно, чтобы разные объекты возвращались (иногда) каждый раз ...?

1 Ответ

0 голосов
/ 16 июля 2010

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

  • Учитывая, что мой макет будет вести себя определенным образом
  • Когда я используюмой класс
  • Тогда я ожидаю этого результата

Тогда вы можете заставить свой макет вести себя по-разному - независимо от аргументов - и проверить, что ваш класс ведет себя соответствующим образом в этих различных ситуациях.У вас будет новый тест для каждого контекста.Я часто называю свои тесты после поведения в контексте:

  • должен дать мне пустой список, если ничего не найдено
  • должен обработать и вернуть вещи, которые найдены
  • должен выдавать сообщение об ошибке, если служба выдает исключение

и т. Д., Только в верблюжьей клетке и с атрибутом [Test].

Помогает ли это?Если нет, возможно, я неправильно понял проблему - извинения.

...