在我看来,你的问题就在这方面;
repositoryMock.Setup(
r => r.Add(It.IsAny<Match>())).Callback(() => match.Id = 1);
您在这里实际做的是设置您在测试中声明的第一个匹配对象的id,而不是在服务中创建的新匹配。
因为
Match
您将提供给存储库的对象是在内部创建的,我想不出一种简单的方法在您的测试方法中引用它来为其设置回调。对我来说,这表明您可能试图在一个单元测试中测试太多。
我认为您应该简单地测试Add方法是否被调用,并编写一个单独的测试来确保它按预期工作。
我提出这样的建议;
[Test]
public void ServiceAddsNewMatchToRepository()
{
var repositoryMock = new Mock<IMatchRepository>();
bool addCalled = false;
repositoryMock
.Expect(r => r.Add(It.Is<Match>(x => x.Id == 0))
.Callback(() => addCalled = true);
var serviceFacade = new DefaultServiceFacade(repositoryMock.Object);
serviceFacade.CreateMatch(User);
Assert.True(addCalled);
}
....
[Test]
public void AddingANewMatchGeneratesANewId()
{
var match = new Match(user);
var matchRepository = new MatchRepository();
var returnedMatch = matchRepository.Add(match);
Assert.That(returnedMatch.Id, Is.GreaterThan(0));
}