NMock - Как заставить метод с одинаковыми типами аргументов возвращать разные значения? - PullRequest
2 голосов
/ 08 декабря 2010

У меня есть такой метод:

public string MyMethod(string a, string b)
{
  if(a == "abcd" && b == "xyz")
    return "good";

  if(a == "xyz" && b == "something")
        return "even better";

  return "unexpected";
}

   public string MainMethod()
   {
     string s1, s2;
     if(some condition)
     {
       s1= "abcd";
       s2 = "xyz";
     } 

     return service.MyMethod(s1, s2);

   }

Мой фиктивный объект создан вот так

   AppObj obj = new AppObj();

  Mockery mocks = new Mockery();
  mockMyService = mocks.NewMock<IMyService>();
  Expect.Once.On(mockMyService ).Method("MyMethod").
                 With("abcd", "xyz").
                 Will(Return.Value("good"));

   obj.MainMethod();
   Expect.Once.On(mockMyService ).Method("MyMethod").
                 With("xyz", "something").
                 Will(Return.Value("even better"));
   obj.MainMethod();

Проблема с приведенным выше кодом заключается в том, что он всегда принимает параметры первого метода-макета и возвращает «хорошо». Что мне нужно сделать, чтобы NMock возвращал разные значения для одного и того же метода с разными значениями аргументов? Пожалуйста, помогите !!

1 Ответ

6 голосов
/ 09 декабря 2010

Понял !!

Необходимо использовать mock.Ordered.

Все методы mock вызываются неупорядоченным образом.Чтобы сделать заказ, нужно использовать:

Using(mock.Ordered)
{
   MyMethod1(arg1, arg2);
   MyMethod2(arg2, arg1);
}

Вот и все !!:)

...