C# 关于单元测试的基本断言
给定下面的函数-如果值“Value”已从用户中删除,我是否能够断言?或者该断言是UserService测试的一部分 另外,我可以从函数中测试哪些断言C# 关于单元测试的基本断言,c#,asp.net-mvc,unit-testing,nunit,C#,Asp.net Mvc,Unit Testing,Nunit,给定下面的函数-如果值“Value”已从用户中删除,我是否能够断言?或者该断言是UserService测试的一部分 另外,我可以从函数中测试哪些断言 public IHttpActionResult Post(string value) { var user = authorizationService.GetCurrentUser(); var isDeleted = userService.DeleteValue(value, user);
public IHttpActionResult Post(string value)
{
var user = authorizationService.GetCurrentUser();
var isDeleted = userService.DeleteValue(value, user);
if (!isDeleted)
{
return NotFound();
}
userService.DeleteProperty(value, user);
var identityResult = userService.Update(user);
if (identityResult.Succeeded)
{
return Ok();
}
return InternalServerError();
}
是的,您可以对此进行测试:单元测试不必是每个sé的最小可能单元,但它也可能包含其中的另一个单元。通过为这两种场景编写测试,您实际上是在创建一个分层项目,在这个项目中,您对不同的层以及它们为您的链添加的价值进行了单独的测试 您可以在生产链中与VAT进行类比,其中每个测试将测试每个细分市场中的增值。关于这方面的更多信息 这可以转化为您的问题:是的,您可以(并且应该)测试此操作方法是否完成了它应该完成的任务 您可以执行的几个测试示例:
为value
null
不是预期格式(数字、负值、特殊字符)值
- 找不到用户
- 有效的
值将显示
Ok()
userService
中进行这些测试,您将知道问题的确切位置,以防问题无法按您希望的方式工作:
测试:控制器维修结论
工作
有缺陷的测试不起作用
无法工作控制器测试失败
不工作不工作服务测试失败
虽然不为控制器编写测试,但依赖服务并不能提供代码实际工作的信息
单元测试和其他类型的测试(主要是集成和验收测试)是很薄的,因为您正在测试系统的更大的一部分,但我仍然认为它是单元测试,因为它包含在应用程序的逻辑中,并且不使用任何外部资源(数据库调用得到嘲笑/剪切/…)。.
是的,但是在这个函数的特殊情况下,我如何测试该值是否被删除?验证该值是否被删除确实是对userService
的测试,而不是对Post
方法的测试(如您所怀疑的)。这意味着您只需验证Post
方法是否按预期调用了userService
。这可以通过模拟userService
并验证调用来实现,或者通过简单地断言NotFound
不会返回(因为NotFound
仅在未从用户中删除值时才会返回)。