Модульное тестирование универсального репозитория с помощью носорогов - PullRequest
0 голосов
/ 10 января 2011

Почему этот тест не пройден?

    [TestMethod]
    public void Can_show_next_event()
    {
        // Arrange 

        var eventsRepo = MockRepository.GenerateStub<IRepository<Event>>();

        Event nextEvent = new Event{ 
                                       ID = 2, 
                                       Title = "Test Event", 
                                       Date = DateTime.Now.AddDays(2) 
                                    };

        eventsRepo.Stub(x => x.Find(y => y.Date > DateTime.Now))
                  .Return(nextEvent);

        // Act
        var controller = new EventsController(eventsRepo);
        var result = controller.Index() as ViewResult;

        // Assert
        Assert.IsNotNull(result);
        Assert.AreEqual("Details", result.ViewName);

    }

Тест завершается неудачно в последней строке, кажется, репозиторий не возвращает то, что мне нужноуниверсальный интерфейс репозитория

public interface IRepository<T> where T: class
{
    IQueryable<T> GetAll();
    IEnumerable<T> GetAll(Expression<Func<T, bool>> predicate);
    T GetById(int id);
    T Find(Expression<Func<T, bool>> predicate);
    void Add(T item);
    void Delete(T item);
    void Save();
}

Я новичок в издевательстве с носорогом, что я делаю не так?

Заранее спасибо

1 Ответ

0 голосов
/ 10 января 2011

Попробуйте добавить .IgnoreParameters () в эту строку:

eventsRepo.Stub(x => x.Find(y => y.Date > DateTime.Now))
                  .IgnoreParameters()
                  .Return(nextEvent);

Два примечания: ваша функция "T Find(Expression<Func<T,bool>> predicate) "

может просто использовать Predicate<T> вместо Func<T,bool>. Два в основном одинаковы.

Если у вас его еще нет, получите копию книги Роя Ошерова «Искусство модульного тестирования» у Мэннинга. http://www.manning.com/osherove/

Он предоставляет несколько глав для тестирования образцов с использованием Rhino.Mocks

...