鉴于以下功能 - 我是否能够断言价值"值"已从用户中删除?或者,断言是UserService上测试的一部分吗?
另外,我可以从函数中测试哪些断言?
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();
}
答案 0 :(得分:0)
是的,您可以测试:单位测试不必是每个sé中可能的最小单位,但它也可能包含其中的另一个单位。通过为这两种方案编写测试,您实际上是在创建一个分层项目,在该项目中,您可以对不同的层以及它们添加到链中的值进行单独的测试。
您可以在生产链中对增值税进行类比,其中每个测试将测试每个细分中的增值。有关here的更多信息。
这会将您的问题转换为:是的,您可以(并且应该)测试此操作方法是否执行了它应该执行的操作。
您可以做的一些测试示例:
value
是null
value
不是预期格式(数字,负值,特殊字符)value
会显示Ok()
您需要做的是确保您没有针对生产数据库进行测试,而是使用内存存储库(模拟,伪造,存根,接缝,您将其命名)。
通过在您的控制器和userService
内进行这些测试,您将知道问题的确切位置,以防它无法正常工作:
Test for: Controller Service Conclusion
Works Works Works
Works Doesn't work Faulty tests
Doesn't work Works Controller test failed
Doesn't work Doesn't work Service test failed
虽然没有为控制器编写测试但是依赖于服务,不会向您提供代码实际工作的信息。
单元测试和其他类型(主要是集成和验收测试)之间的界限很薄,因为您正在测试系统的更大部分,但我仍然认为它是单元测试,因为它包含在应用程序的逻辑中并且不使用任何外部资源(数据库调用得到模拟/存根/...).