如何在 C# 中对 Task.run() 进行单元测试?

How to unit test Task.run() in C#?

这个问题以前有人问过,但没有回答。 我想测试身份验证方法,我们在其中检查来自数据库的授权用户,如果不是 Null,将 return 用户的详细信息。我如何对此进行单元测试?我正在使用 Xunit。

public async Task<User> Authenticate(string username, string password)
    {
        var user = await Task.Run(() => _users.SingleOrDefault(x => x.Username == username
                                            && x.Password == password));
        // return null if user not found
        if (user == null)
        {
            return null;
        }

        return new User
        {
            Id = user.Id,
            FirstName = user.FirstName,
            LastName = user.LastName,
            Username = user.Username,
            Password = ""
        };
    }

_user 是一个列表。

Task.Run只是一个细节;通过代码块,测试用例可能是:

  • SingleOrDefault returns null
  • SingleOrDefault return单个用户

没有异常处理,但这可能是您可能想要做的另一个测试。

如果您想在调用 SingleOrDefault 时引入延迟以延长等待时间,您可能必须考虑模拟 _users 以便引入该行为。不过,我认为您不一定需要这样做,Task.Run 仍会执行委托并提供结果,无论是否延迟。如果您确实想坚持使用它,SingleOrDefault 将是一个扩展,因此您最终会模拟底层 LINQ 提供程序来执行此操作,任何流行的模拟框架都可以作为 return 值回调的一部分执行此操作。

最后,您的 xUnit 测试方法可能需要修饰以处理异步 SUT。

Whosebug 不是代码编写服务;到目前为止你尝试了什么,你到底被什么难住了等等。考虑到以上几点,应该足以搜索和提出更具体的问题。