改天,另一个问题。我的服务层有以下方法
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 对象复制了 match 对象的一些属性(包括 id)。
我的单元测试应该验证服务中生成的 viewdata 对象的 id > 0。要对此进行归档,我必须模拟存储库和 add 方法的行为。但是每次调用 service 方法时都会创建一个新的匹配对象,并且存储库上的 add 方法会更新引用的匹配对象(不需要返回值)。我不知道用最小起订量来解决这个问题。
到目前为止,这是我的单元测试:
[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));
}
我尝试了其他一些变化 - 没有任何效果。