play framework + DI中完整的单元测试示例
Posted
技术标签:
【中文标题】play framework + DI中完整的单元测试示例【英文标题】:Complete unit testing example in play framework + DI 【发布时间】:2016-06-03 13:23:59 【问题描述】:我正在为 play 2.4 应用程序 + DI 寻找完整的单元测试示例。 这个想法很简单:
-
我们有 application.test.conf,我想从中读取配置数据、运行进化等。
然后我想注入使用 DI 的类的实例,例如:
class UserBean @Inject()(dbConfigProvider: DatabaseConfigProvider, 隐式 val 配置: Configuration, cacheApi: CacheApi)
然后调用注入对象的方法进行测试。
我在这里描述的问题是:https://***.com/questions/37192401/inject-my-bean-like-class-to-test-play-2-4 但没有人回答我的问题。 感谢任何帮助
【问题讨论】:
【参考方案1】:Java 属性在加载带有TypeSafe Config 的conf 文件时具有最高优先级。你可以告诉 sbt 在运行测试时使用不同的配置文件:
javaOptions in Test += "-Dconfig.resource=" + System.getProperty("config.resource", "application.test.conf")
您可以使用 GuiceBuilder 创建您的测试应用程序,请参阅here。 请注意,您的测试中必须有一个正在运行的应用程序,例如:
val myTestApp = new GuiceApplicationBuilder()
.overrides(bind[Component].to[MockComponent])
.build
"my test" in running(myTestApp) ...
然后你就可以使用注入器了,像这样:
val app2MyDao = play.api.Application.instanceCache[MyDAO]
val myDAO: MyDAO = app2MyDao(myTestApp)
您还可以使用 ScalaTest 的特征,例如 OneAppPerSuite 并覆盖它的假应用。
编辑:我制作了一个简单的project 来展示我想要展示的内容。
【讨论】:
我从文档中得到这个想法,但它不起作用,我正在寻找一些工作示例。 我有以下异常:运行beans.RemoteSystemBeanSpec时未捕获的异常:java.lang.NoSuchMethodError:play.utils.Reflect$.bindingsFromConfiguration(Lplay/api/Environment;Lplay/api/PlayConfig;Ljava /lang/String;Ljava/lang/String;Lplay/utils/Reflect$SubClassOf;Lplay/utils/Reflect$SubClassOf;Lscala/reflect/ClassTag;Lscala/reflect/ClassTag;)Lscala/collection/Seq; sbt.ForkMain$ForkError: play.utils.Reflect$.bindingsFromConfiguration(Lplay/api/Environment;Lplay 您可能正在使用一些旧的库/插件。或者,您可能针对不同版本的库(没有该引用方法)等编译您的类...尝试运行sbt clean
,然后运行sbt compile
。另外,请尝试使用最新的库。以上是关于play framework + DI中完整的单元测试示例的主要内容,如果未能解决你的问题,请参考以下文章
Play Framework:使用 H2 内存数据库获取序列 nextval 时出错
Play framework 2.0 尝试级联删除时出错“参数“#1”未设置;SQL语句:delete”
在 Play 2.4 中使用 DI 时如何进行数据库初始化?