【问题标题】:unit testing web api单元测试 web api
【发布时间】:2019-05-16 19:19:03
【问题描述】:

我们目前有一个 Web API (.Net core 2.1),它有一个它调用的注入服务。服务基于接口,服务方法执行业务逻辑和 CRUD 工作。

我们使用实体框架与数据库对话,使用服务在其方法中使用的 UnitOfWork 模式。我们如何在不访问数据库的情况下测试这些调用?我看到了 Moq 框架,但我不确定它如何避免数据库调用?为了创建我的控制器,我需要传递我的服务,其构造函数采用 unitofwork,通过 .net 依赖注入完成。

我不确定如何模拟数据部分。 Moq 会自动执行此操作,还是我需要设置假数据,然后 Moq 将其用于我的数据库调用?例如,如果我想检查 GET 请求是否返回数据。或帖子返回 Ok。

【问题讨论】:

  • 我认为单元测试数据访问代码没有意义。您应该对业务逻辑进行单元测试。那里的纯粹主义者可能会不同意,但我认为这是浪费时间。如果您确实想要对数据访问代码进行单元测试并且使用的是 EF 内核,那么您可以使用内存中的功能使其更容易。 docs.microsoft.com/en-us/ef/core/miscellaneous/testing/…
  • 我同意 William 关于测试业务逻辑的观点。但是,如果您的服务方法中有逻辑,则需要测试您的数据库命中。尽管如此,不要将单元测试与集成测试混为一谈。您需要模拟测试类的目标类之外的所有内容。所以模拟与其他层相关的所有内容

标签: .net unit-testing asp.net-web-api moq


【解决方案1】:

如果您使用依赖注入,您将模拟您正在注入的对象,并在 Moq 的帮助下模拟它(我假设您正在注入实际连接到数据库的对象)。

基本上,你告诉 Moq 一个方法应该如何被调用(你设置它)以及它应该返回什么。那么当你的业务逻辑试图从这个模拟对象中使用这个方法时,实际上是你的模拟对象在回答调用而不是数据库。

这是一个关于如何使用 Moq 的快速示例

但同样,我假设您正在注入实际进行调用的对象。我认为您注入的所有对象都需要被模拟,因为您正在测试接收注入的对象而不是注入的对象......

为了让 Moq 真正有用,请确保所有外部依赖项都有自己的类,并且您正在注入它,这样您的代码就可以轻松测试。

【讨论】:

    猜你喜欢
    • 2012-03-18
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多