Во-первых, какую издевательскую библиотеку вы используете (ответ может измениться на основе этого)?
Я знаю, что если вы используете 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
возвращения true
) и b2
было бы ложным (так как вы Бесполезный Не сообщайте репозиторию о чем-то конкретном, если он получил f2
, поэтому он вернется к по умолчанию, когда возвращается false).
В Rhino Mocks, вам нужно настроить ваши ожидания, как это:
repository.Expect(s => s.IsExist(Arg<Foo>.Is.TypeOf)).Returns(true);
которая возвращает истину, если IsExist была вызвана любого экземпляра объекта Foo. Если вам нужно быть более конкретным, вы могли бы иметь что-то вроде этого:
repository.Expect(s => s.IsExist(f => f.SomeProperty == "blah" && f.OtherProperty.StartsWith("baz")))).Returns(true);
которая возвращает истину, если foo.SomeProperty
составил "blah"
и foo.OtherProperty
начал с "baz"
.
Не похоже, что вы используете Rhino Mocks, так как ваш синтаксис немного отличается, но, надеюсь, что указывает на вас в правильном направлении ...
u правый.i погрешность. – tobias