【问题标题】:Play framework controller test - No implementation for <classname> was bound播放框架控制器测试 - 未绑定 <classname> 的实现
【发布时间】:2018-10-09 13:08:31
【问题描述】:

我想为控制器类编写测试。控制器类将服务对象作为构造函数参数。在服务类的构造函数中添加@Inject注解。

class AssociateService @Inject()(configuration: Configuation){...}

服务类的构造函数参数是一个自定义配置对象,也是为应用程序创建的。我也将@Inject 添加到了配置类的构造函数中。现在我收到这些类型的错误消息:

没有绑定“className”的实现。

在 java.lang.Integer 中找不到合适的构造函数。类必须有一个(并且只有一个)用@Inject 注释的构造函数,或者一个非私有的零参数构造函数。

配置类有几个构造函数参数,它们是“基本”类型(Int、Boolean),一个参数是自定义类类型(className)。 我应该如何进行此绑定,或者仅注释其他内容就足够了? 为什么它会显示构造函数错误消息?

【问题讨论】:

    标签: scala dependency-injection playframework guice


    【解决方案1】:

    据我所知,测试和 guice 有两种方式,需要权衡取舍:

    1. 不要使用字段注入,只使用构造函数注入和在构造函数中为注入的参数分配字段。这种方法可以实现非常简单的测试解决方案,只是不要在测试中使用依赖注入。但是您的所有类都必须能够在测试用例中使用 new 运算符创建...

    附言。当然可以定义可选的构造函数并使用字段注入,但这不是很明确的解决方案。

    1. 为每个测试或类似测试组创建具有绑定到其实现的可注入接口的正确模块。有时这种方法会花费大量不必要的工作时间。

    您必须设计您的软件以保持可测试性。有时不是项目中的每一行代码都需要测试,有时不是每个代码都是可测试的,你必须将它与需要测试的软件的重要部分分开。如果您按照单一职责原则设计软件,那么编写测试会容易得多...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多