我做出了务实的决定,让我的存储库同时充当存储库和存储库 严重的瘦服务层。
我要测试的存储库的一种方法是Add
方法。它看起来像这样:
public void Add(Post post)
{
post.Slug = SlugConverter.Convert(post.Title);
context.Posts.Add(post);
context.SaveChanges();
}
我想特别测试的是Add
方法以某种方式更新给定帖子的Slug
属性。
我该如何测试?我想知道我应该特别具体地说SlugConverter
已经经过了充分的考验。
答案 0 :(得分:1)
您必须使用模拟框架来测试此功能。使用Moq:
[Test]
public void Add_PostIsValid_PostSlugIsUpdated()
{
var post = new Mock<Post>();
post.Setup(x=>x.Title).Returns("Test");
var myRepository = new MyRepository();
myRepository.Add(post.Object);
post.VerifySet(pst => pst.Slug = SlugConverter.Convert(post.Title));
}
还尝试失去依赖关系,以便更轻松,更强大的测试。将此代码段视为伪代码,因为我现在无法访问visual studio。
答案 1 :(得分:0)
根据您的描述,我假设,每当添加Post时,您都希望确保修改Slug
属性。您不关心它是否被正确修改(换句话说,使用SlugConverter
转换后它具有什么价值,因为,正如您所提到的,您已经覆盖了该部分),您关心的只是那个它被修改了。
说完这个,你就有了
[Test]
public void EnsureSlugIsModifiedBeforeBeingSaved()
{
var post = new Post();
var clonedPost = (Post)post.Clone();
var myRepository = new MyRepository();
myRepository.Add(post);
// at this point post should have been saved and Slug should have been modified.
Assert.AreNotEqual(clonedPost.Slug, post.Slug);
}