Как утверждать, если метод был вызван в другом методе в RhinoMocks? - PullRequest
0 голосов
/ 05 мая 2010

У меня есть класс, который имеет два метода. Один метод должен вызывать другой метод, и в моем тесте я хочу утверждать, что он был вызван.

public class Tasks : ITasks
{
  public void MethodOne()
  {
    MethodTwo(1);
  }

  public int MethodTwo(int i)
  {
    return i + 1;
  }
}

Я хочу высмеять Задачи и сделать что-то вроде tasks.AssertWasCalled(x => x.MethodTwo(1)). Должен ли MethodTwo быть виртуальным?

Ответы [ 2 ]

1 голос
/ 05 мая 2010

Понятие, которое вы ищете: частичное макетирование (это показывает старый синтаксис, но я не помню новый синтаксис). Вы должны прочитать об этом. По сути, вы создаете макет на Задачах (не IT-задачах) и говорите ему, чтобы имитировался только MethodTwo (который должен быть виртуальным).

Однако ... вы можете пересмотреть свой дизайн. Что такое ITasks? Какова роль? Это разные актуальные задачи? Есть ли какая-то причина, почему вы хотели бы, чтобы они были в одном классе? Насколько я понимаю, частичные макеты включаются только тогда, когда вам нужно протестировать устаревшие компоненты - я никогда не нашел для них применения.

0 голосов
/ 25 февраля 2011

Конечно, мое мышление в то время было ошибочным. Я должен насмехаться над ИТ-заданиями, а не над реализацией (Задачи):

ITasks tasks = MockRepository.GenerateMock<ITasks>();
tasks.AssertWasCalled(x => x.MethodTwo(Arg<int>.Is.Equal(1)));
...