.NET & Xunit 最佳实践的单元测试

之前我们介绍了如何在单元测试中设置优先级,以一定的顺序执行单元测试。但根据对单元测试排序.NET Core 和 .NET Standard 单元测试最佳做法我们可以知道,这并不是最佳做法。
那么最佳做法是什么呢?我们应该保证每一个单元测试都是自包含的。
StudentServiceWithPriorityUnitTest的测试为例,
在测试修改学生信息的方法中,我们应该先新增一个学生信息,然后再修改学生信息,
在测试删除学生信息的方法中,我们应该先新增一个学生信息,然后再删除学生信息,
以此为思路,则修改和删除的测试方法,不再需要依赖于新增学生的测试方法,则每个测试可以独立进行。
现在我们将StudentServiceWithPriorityUnitTest进行改写:

public class StudentServiceWithoutPriorityUnitTest
{
    StudentService _studentService;
    public StudentServiceWithoutPriorityUnitTest()
    {
        _studentService = new StudentService();
    }

    [Fact]
    public Student Insert_A_Student()
    {
        var data = new Student()
        {
            Name = "test name"
        };
        _studentService.Insert(data);
        data.ShouldNotBeNull();
        return data;
    }

    [Fact]
    public void Update_A_Student()
    {
        var data = Insert_A_Student();
        data.Name = "update student name";
        _studentService.Update(data).ShouldBeTrue();
    }

    [Fact]
    public void Update_A_Student_Failed()
    {
        var data = new Student()
        {
            Id = Guid.NewGuid(),
            Name = "test name"
        };
        Should.Throw<DataNotExistException>(() => _studentService.Update(data));
    }


    [Fact]
    public void Get_A_Student()
    {
        var data = Insert_A_Student();
        var getData = _studentService.Get(data.Id);
        getData.ShouldNotBeNull();
        getData.Id.ShouldBeEquivalentTo(data.Id);
    }

    [Fact]
    public void Get_A_Student_Failed()
    {
        Should.Throw<DataNotExistException>(() => _studentService.Get(Guid.NewGuid()));
    }

    [Fact]
    public void Delete_A_Student()
    {
        var data = Insert_A_Student();
        _studentService.Delete(data.Id);
    }

    [Fact]
    public void Delete_A_Student_Failed()
    {
        Should.Throw<DataNotExistException>(() => _studentService.Delete(Guid.NewGuid()));
    }
}

示例代码

StudentServiceWithoutPriorityUnitTest

参考资料

.NET Core 和 .NET Standard 单元测试最佳做法
对单元测试排序

posted @ 2022-11-07 09:11  Lulus  阅读(545)  评论(0编辑  收藏  举报