Еще один день, другой вопрос. Мой сервисный слой имеет следующий метод
public MatchViewData CreateMatch(string user)
{
var matchViewData = !HasReachedMaxNumberOfMatchesLimit(user) ?
CreateMatchAndAddToRepository(user) :
MatchViewData.NewInstance(new Match(user));
matchViewData.LimitReached = HasReachedMaxNumberOfMatchesLimit(user);
return matchViewData;
}
Метод вызывает вспомогательный метод this для создания нового объекта сопоставления:
private MatchViewData CreateMatchAndAddToRepository(string user)
{
var match = new Match(user);
MatchRepository.Add(match);
return MatchViewData.NewInstance(match);
}
В хранилище хранится заданный объект сопоставления и устанавливается значение id, равное> 0.
public void Add(Match match)
{
Check.Require(match != null);
var numberOfMatchesBefore = Matches.Count;
SetIdPerReflection(match, NextVal());
Matches.Add(match);
Check.Ensure(numberOfMatchesBefore == Matches.Count - 1);
}
Объект matchviewdata копирует некоторые свойства объекта соответствия (включая идентификатор).
Мой модульный тест должен проверить, что результирующий объект viewdata в сервисе имеет id> 0. Чтобы архивировать это, я должен смоделировать хранилище и поведение метода add. Но сервисный метод создает новый объект сопоставления каждый раз, когда он вызывается, и метод add в хранилище обновляет ссылочный объект сопоставления (возвращаемое значение не требуется). Я понятия не имею, чтобы решить это с moq.
Пока это мой модульный тест:
[Test]
public void ServiceCreateMatchReturnedMatchViewDataHasNonZeroId()
{
var match = TestUtils.FakePersistentMatch(User, 1);
var repositoryMock = new Mock<IMatchRepository>();
repositoryMock.Setup(
r => r.Add(It.IsAny<Match>())).Callback(() => match.Id = 1);
var serviceFacade = new DefaultServiceFacade(repositoryMock.Object);
var returnedMatch = serviceFacade.CreateMatch(User);
Assert.That(returnedMatch.Id, Is.GreaterThan(0));
}
Я пробовал другие варианты - ничего не работает.