Scala 播放框架控制器测试-未实现<;类名>;约束

Scala 播放框架控制器测试-未实现<;类名>;约束,scala,dependency-injection,playframework,guice,Scala,Dependency Injection,Playframework,Guice,我想为控制器类编写测试。控制器类将服务对象作为构造函数参数。向服务类的构造函数添加了@Inject注释 class AssociateService@Inject()(配置:配置){…} 服务类的构造函数参数是也为应用程序创建的自定义配置对象。我还向config类的构造函数添加了@Inject。现在我收到了以下类型的错误消息: 没有绑定“className”的实现 在java.lang.Integer中找不到合适的构造函数。类必须有一个(并且只有一个)用@Inject注释的构造函数,或者一个非私

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

class AssociateService@Inject()(配置:配置){…}

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

没有绑定“className”的实现

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

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

据我所知,测试和guice有两种方法,可以进行权衡:

  • 不要使用字段注入,对于注入的参数,只使用构造函数注入和构造函数中的字段赋值。这种方法支持非常简单的测试解决方案,只是在测试中不使用依赖项注入。但您的所有类都必须能够在测试用例中使用新运算符创建
  • 当然,您可以定义可选构造函数并使用字段注入,但这并不是一个非常明确的解决方案

  • 为每个测试或一组类似测试创建具有绑定到其实现的可注入接口的正确模块。有时,这种方法需要花费大量不必要的工作时间 您必须设计软件以保持可测试性。有时并非项目中的每一行代码都需要测试,有时并非每一行代码都是可测试的,您必须将其与软件中需要测试的重要部分分开。如果你用单一责任原则设计你的软件,那么写测试就容易多了