ложная проблема - PullRequest
       7

ложная проблема

0 голосов
/ 11 июня 2009

// IsExist всегда false, это ошибка?

  [TestMethod]
   public void IsExist()
   {
       private Mock<IRepository> repository = new Mock<IRepository>();
                   Foo f = new Foo();
                   repository.Expect(s => s.IsExist(foo)).Returns(true);
       var controller = new MyController(repository.Object);
       var result = (ViewResult)controller.DoSometing();

   }

           public class MyController : Controller
           {

           IRepository _repository ;

           public MyController(IRepository repository)
   {
       _repository = repository;

   }

           public ViewResult DoSometing()
   {
       bool IsExist = _repository.IsExist(new Foo());
                   //IsExist always false,is it a bug?
       return View(foo);
   }

           }

Ответы [ 2 ]

1 голос
/ 11 июня 2009

Во-первых, какую библиотеку-макет вы используете (в зависимости от этого ответ может измениться)?

Я знаю, что если вы использовали Rhino Mocks, проблема была бы в том, что ваше ожидание настроено на возвращение true, когда он получит тот конкретный экземпляр foo, который вы создадите наверху. Это отличается от того, что передается, когда выполняется в вашем контроллере, поэтому он возвращает false (поскольку ожидание не было установлено для этой версии foo объекта). Чтобы было понятнее, если бы у вас был этот код:

Foo f1 = new Foo();
Foo f2 = new Foo();
repository.Expect(s => s.IsExist(f1)).Returns(true);
bool b1 = repository.Object.IsExist(f1);
bool b2 = repository.Object.IsExist(f2);

Я бы ожидал, что b1 будет истинным (так как это конкретное ожидание, которое вы установили, т.е. учитывая f1 return true) и b2 будет ложным (так как вы не указали хранилищу сделайте что-нибудь конкретное, если он получил f2, поэтому он вернется к своему поведению по умолчанию, возвращая false).

В Rhino Mocks вам нужно настроить ожидание так:

repository.Expect(s => s.IsExist(Arg<Foo>.Is.TypeOf)).Returns(true);

, который вернул бы true, если IsExist был вызван с любым экземпляром объекта Foo. Если вам нужно быть более конкретным, вы можете получить что-то вроде этого:

repository.Expect(s => s.IsExist(f => f.SomeProperty == "blah" && f.OtherProperty.StartsWith("baz")))).Returns(true);

, который вернул бы true, если foo.SomeProperty равняется "blah" и foo.OtherProperty начинается с "baz".

Не похоже, что вы используете Rhino Mocks, поскольку ваш синтаксис немного отличается, но, надеюсь, это укажет вам правильное направление ...

0 голосов
/ 11 июня 2009

Инициализируйте свойства вашего объекта некоторыми значениями, прежде чем проверять, существует ли он.

 public ViewResult DoSometing()
   {
       Foo obj = new Foo();
       obj.Property1 = "some value";
       bool IsExist = _repository.IsExist(obj);
                   //IsExist always false,is it a bug?
       return View(foo);
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...