如何在 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 不是代码编写服务;到目前为止你尝试了什么,你到底被什么难住了等等。考虑到以上几点,应该足以搜索和提出更具体的问题。
这个问题以前有人问过,但没有回答。 我想测试身份验证方法,我们在其中检查来自数据库的授权用户,如果不是 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 不是代码编写服务;到目前为止你尝试了什么,你到底被什么难住了等等。考虑到以上几点,应该足以搜索和提出更具体的问题。