如何测试该方法更新对象

本文关键字:方法 更新 对象 测试 何测试 | 更新日期: 2023-09-27 18:20:04

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

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

public void Add(Post post)
{
    post.Slug = SlugConverter.Convert(post.Title);
    context.Posts.Add(post);
    context.SaveChanges();
}

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

我应该如何进行测试?考虑到SlugConverter已经经过了充分的测试,我想知道我应该有多具体。

如何测试该方法更新对象

您必须使用mocking框架来测试此功能。使用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));
}

还要尽量减少依赖性,以便进行更简单、更健壮的测试。将此代码段视为伪代码,因为我现在无法访问visualstudio。

根据您的描述,我认为无论何时添加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);
}