【问题标题】:Unit test a controller that calls another controller through the Startup class对通过 Startup 类调用另一个控制器的控制器进行单元测试
【发布时间】:2018-11-06 07:52:39
【问题描述】:

我有一个 asp.net web api 项目,我想对控制器中的操作进行单元测试。

此操作调用ServiceManager 类中的另一个静态方法,该方法调用另一个controllerApi 中的另一个操作!必须调用启动类中的 Configuration(IAppBuilder app) 方法来正确设置 ServiceManager 中的几个属性,以便操作返回某些内容!

下图说明:

我想要进行单元测试是确保在调用actionFoo 时,也调用actionBoo。我不想做集成测试,也不想moq整个配置,这样单元测试就没用了。

测试这类场景的正确方法是什么?

任何帮助将不胜感激。

【问题讨论】:

  • 这听起来完全错误,而且代码设计很糟糕。如果您能提供来自 ControllerA、ControllerB 和 ServiceManager 的重要代码,那就更好了。此外,您可能不应该从另一个控制器调用一个控制器,听起来您在那里做错了什么。听起来像的另一件事是您没有将 ServiceManager 实例注入控制器。最后,如果您正在对控制器进行单元测试,那么恕我直言,您可能有太多的逻辑
  • 嗨@matt_lethargic,感谢您的回复:)对不起,为了让问题更简单,我可能会推出一些重要的细节。 ControllerA 是监控其他服务器中其他 API 的 Api 的一部分(所以实际上我在另一台服务器中有 ControllerB,提供 CPU 使用率、内存......以及其他服务器中的几个其他控制器),我从你那里得到说我可能不应该测试整个食物链并坚持自己测试每个api?
  • 如果控制器 A 与控制器 B 在不同的 API 中,那么这绝对是一个集成测试,即使两个 api 都在同一个解决方案中。如果您正在测试的“单元”是控制器,那么您应该将控制器视为一个黑匣子并测试输出与输入。
  • 是的,这是有道理的,你可能想把你的 cmets 变成一个答案,我会接受它;),谢谢。

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


【解决方案1】:

正如 OP 的 cmets 中所提到的,测试调用另一个 API 的控制器是一个集成测试,所以不是你所说的单元测试。单独测试每个控制器通常是单元测试的领域,模拟依赖关系并根据输入测试输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    相关资源
    最近更新 更多