首页 > 解决方案 > 播放框架控制器测试 - 没有实现被束缚

问题描述

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

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

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

没有绑定“className”的实现。

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

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

标签: scaladependency-injectionplayframeworkguice

解决方案


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

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

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

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

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


推荐阅读