如何测试该方法更新对象
本文关键字:方法 更新 对象 测试 何测试 | 更新日期: 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);
}