如何测试该方法更新对象?

时间:2014-08-31 15:00:26

标签: c# unit-testing tdd

我做出了务实的决定,让我的存储库同时充当存储库和存储库 严重的服务层。

我要测试的存储库的一种方法是Add方法。它看起来像这样:

public void Add(Post post)
{
    post.Slug = SlugConverter.Convert(post.Title);

    context.Posts.Add(post);
    context.SaveChanges();
}

我想特别测试的是Add方法以某种方式更新给定帖子的Slug属性。

我该如何测试?我想知道我应该特别具体地说SlugConverter已经经过了充分的考验。

2 个答案:

答案 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);
}