【发布时间】:2013-11-03 21:43:38
【问题描述】:
我正在尝试使用 MOQ 来测试存储库以模拟存储库的行为。我是 MOQ 的新手,所以请多多包涵。
给定以下方法:
public static SubmissionVersion DeleteNote(IRepository repository, SubmissionVersion version, Guid noteId)
{
Note note = repository.GetById<Note>(noteId);
version.Notes.Remove(note);
repository.Save(version);
repository.Delete(note);
return repository.GetById<SubmissionVersion>(version.Id);
}
这个测试看起来好吗?
[Fact]
public void DeleteNoteV2()
{
// Arrange
var note = new Note{ Id = Guid.NewGuid()};
var subVersion = new Mock<SubmissionVersion>();
subVersion.Setup(x => x.Notes.Remove(note));
var repo = new Mock<IRepository>();
repo.Setup(x => x.GetById<Note>(note.Id)).Returns(note);
repo.Setup(x => x.GetById<SubmissionVersion>(It.IsAny<Guid?>())).Returns(subVersion.Object);
// Act
SubmissionVersion.DeleteNote(repo.Object, subVersion.Object, note.Id.Value);
// Assert
repo.Verify(x => x.GetById<Note>(note.Id), Times.Once());
repo.Verify(x => x.Save(subVersion.Object), Times.Once());
repo.Verify(x => x.Delete(note), Times.Once());
subVersion.Verify(x => x.Notes.Remove(It.IsAny<Note>()), Times.Once());
}
【问题讨论】:
-
测试它是否有效的一个好方法是注释掉你的代码并确认测试在预期的点失败,然后再次包含代码并确保它通过......这就是 TDD如此好的方法,因为它也可以作为您正在编写的测试的验证。
标签: c# unit-testing moq xunit xunit.net