Я пишу модульные тесты для метода, который использует объект, который я держу в качестве переменной сеанса, доступ к которой осуществляется сервисом, который я назвал «SessionService».Полный метод выглядит следующим образом:
return SessionService.Items.OrderBy(x => x.Id)
.FirstOrDefault(x => x.Required && !x.Complete);
Я - мой юнит-тест, я издеваюсь над сервисом, чтобы вернуть список предметов:
var mocks = new MockRepository();
var mockSessionService = mocks.StrictMock<ISessionService>();
using (mocks.Record())
{
Expect.Call(mockSessionService.Items).IgnoreArguments()
.Return(MockItems);
}
ObjectFactory.Inject(typeof(ISessionService), mockSessionService);
var inventoryService =
ObjectFactory.GetInstance<IInventorySurveyService>();
var item = inventoryService.GetNextSurveyItem();
Assert.IsNotNull(item);
Assert.That(item.Id == Guid.Parse("26fd9364-d831-477a-9faf-25271562f144"));
Что я нахожу, так эточто моя инструкция linq, кажется, ссылается на мой список "Items" более одного раза, потому что мои модульные тесты выдают ошибку, если я не добавлю ".Repeat.Any ()" к моей инструкции "Expect":
Expect.Call(mockSessionService.Items).IgnoreArguments()
.Return(MockItems).Repeat.Any();
Это правильно?Сколько раз на мой список ссылаются?
Редактировать: добавлено больше примера кода
Больше редактирования :
Кажется, что мы могли бы бытьнедопонимание друг друга.Я понимаю, что код, который вы разместили, состоит в том, чтобы проверить с помощью моего модульного теста, что вызов к моей SessionService происходит только один раз.
Я использую мой вызов «Expect» для макетирования этого вызова в SessionService и возврата ожидаемого ответа, и что мой тест на самом деле ищет для проверки - это то, что в утверждениях Assert внизумоего теста.(Я думаю, что я использую это неправильно - я должен был использовать заглушку вместо макета?)
То, что я спрашивал в своем первоначальном вопросе, не имело никакого отношения к результатам моего модульного теста, яМне было просто интересно, сколько раз SessionService вызывается в этом операторе, когда я выполняю свой модульный тест:
return SessionService.Items.OrderBy(x => x.Id)
.FirstOrDefault(x => x.Required && !x.Complete);
Я просто хочу получить ответ, мне не нужно знать, как проверить ответ (хотяЯ знаю, как это сделать сейчас - спасибо!)