播放框架控制器测试-未绑定<classname>的任何实现

时间:2018-10-09 13:08:31

标签: scala dependency-injection playframework guice

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

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

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

  

没有绑定“ className”的实现。

     

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

配置类具有多个构造函数参数,它们是“基本”类型(Int,布尔值),而一个参数是自定义类类型(className)。 我应该如何进行这种绑定,还是足以注释其他内容? 以及为什么显示构造函数错误消息?

1 个答案:

答案 0 :(得分:1)

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

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

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

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

您必须设计软件以维护可测试性。有时并非项目中的每一行代码都需要测试,有时并非每条代码都是可测试的,因此必须将其与需要测试的软件重要部分分开。如果您以单一责任原则设计软件,那么编写测试就容易得多了。