Тестовый запрос к репозиторию с помощью moq - PullRequest
2 голосов
/ 03 марта 2012

Я пишу модульные тесты для своего репозитория, и мне нужно протестировать метод репозитория с делегатом.

Прежде всего часть из интерфейса репозитория

public interface IRepository<T>
{
    ...
    IQueryable<T> All();
    ...
}

и вот метод, который я хочутестировать.Я делаю это как метод расширения для IRepository<RentDetails>

public static bool AnyIntersectionForRoomWithDatesExists
(this IRepository<RentDetails> repository, Room room, DateTime startDate, 
DateTime terminationDate)
{
var rent = repository.All().Where(
r =>
(r.BeginningDate <= startDate && r.TerminationDate > terminationDate &&
          r.TerminationDate < terminationDate) ||
(r.BeginningDate > startDate) ||
(r.TerminationDate >= terminationDate && r.BeginningDate > startDate &&
          r.BeginningDate < terminationDate));
        }

. В своих модульных тестах я создал коллекцию IEnumerable<RentDetails>

IEnumerable<RentDetails> rentDetailsColection = new List<RentDetails>
{
new RentDetails(TenantTestHelper.ValidTenant,roomMoq, new DateTime(2012, 1, 1),new DateTime(2012, 2, 1)),
new RentDetails(TenantTestHelper.ValidTenant,roomMoq, new DateTime(2012, 3, 1),new DateTime(2012, 7, 1)),
new RentDetails(TenantTestHelper.ValidTenant,roomMoq, new DateTime(2012, 10, 1),DateTime.MaxValue)
};

, но у меня возникла проблема с настройкой хранилища.MOQ?Я попробовал следующее

[Test]
var reqestStartDate = new DateTime(2012, 4, 1);
var requestTerminationDate = reqestStartDate.AddDays(30);

...

rentDetailsRepositoryMoq.Setup(c => c.All().Where(r =>
(r.BeginningDate <= reqestStartDate &&
r.TerminationDate > requestTerminationDate &&
r.TerminationDate < requestTerminationDate) ||
(r.BeginningDate > reqestStartDate) ||
(r.TerminationDate >= requestTerminationDate &&
r.BeginningDate > reqestStartDate &&
r.BeginningDate < requestTerminationDate)))
.Returns((IQueryable<RentDetails>)rentDetailsColection
.Where(r =>(r.BeginningDate <= reqestStartDate &&
r.TerminationDate > requestTerminationDate &&
r.TerminationDate < requestTerminationDate) ||
(r.BeginningDate > reqestStartDate) ||
(r.TerminationDate >= requestTerminationDate &&
r.BeginningDate > reqestStartDate && r.BeginningDate < requestTerminationDate)));

, но у меня возникла исключительная ситуация

NotSupportedException

Выражение ссылается на метод, который не принадлежит к поддельному объекту: c => c.All() .Where (r => (((r.BeginningDate <= .reqestStartDate && r.TerminationDate> .requestTerminationDate) && r.TerminationDate <.requestTerminationDate) || r.BeginningDate> .reqestStartDate) || (r.er> = .requestTerminationDate && r.BeginningDate> .reqestStartDate) && r.BeginningDate <.requestTerminationDate)) </p>

1 Ответ

4 голосов
/ 03 марта 2012

Просто Setup IRepository.All(), чтобы вернуть IQueryable<T> и утверждать, что тестируемый модуль делает то, что должен делать. Обратите внимание, что по общепринятым определениям вы пытаетесь заглушить хранилище, и вы будете утверждать состояние.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...