关于单元测试的基本断言

时间:2014-06-16 16:12:28

标签: c# asp.net-mvc unit-testing nunit

鉴于以下功能 - 我是否能够断言价值"值"已从用户中删除?或者,断言是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();
    }

1 个答案:

答案 0 :(得分:0)

是的,您可以测试:单位测试不必是每个sé中可能的最小单位,但它也可能包含其中的另一个单位。通过为这两种方案编写测试,您实际上是在创建一个分层项目,在该项目中,您可以对不同的层以及它们添加到链中的值进行单独的测试。

您可以在生产链中对增值税进行类比,其中每个测试将测试每个细分中的增值。有关here的更多信息。

这会将您的问题转换为:是的,您可以(并且应该)测试此操作方法是否执行了它应该执行的操作。

您可以做的一些测试示例:

  • valuenull
  • 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

虽然没有为控制器编写测试但是依赖于服务,会向您提供代码实际工作的信息。

单元测试和其他类型(主要是集成和验收测试)之间的界限很薄,因为您正在测试系统的更大部分,但我仍然认为它是单元测试,因为它包含在应用程序的逻辑中并且不使用任何外部资源(数据库调用得到模拟/存根/...).