Playframework 重头戏2.4:如何在单元测试期间禁用路由文件加载?

Playframework 重头戏2.4:如何在单元测试期间禁用路由文件加载?,playframework,playframework-2.4,Playframework,Playframework 2.4,后台:我正在使用Play2.4(Java)和InjectedRoutesGenerator以及Guice模块来配置各种依赖项。但是在单元测试期间,FakeApplication试图通过注入器从路由文件加载所有控制器,其中一些控制器由于单元测试环境中不可用的外部依赖关系而失败 在从play.test.WithApplication扩展的单元测试期间,如何禁用默认路由文件处理?或者如何用自定义路由文件替换默认路由? 我试图使用,但我发现路由器未找到错误。显然,我犯了一些错误,我不知道在哪里 我不太了

后台:我正在使用Play2.4(Java)和InjectedRoutesGenerator以及Guice模块来配置各种依赖项。但是在单元测试期间,FakeApplication试图通过注入器从路由文件加载所有控制器,其中一些控制器由于单元测试环境中不可用的外部依赖关系而失败

在从play.test.WithApplication扩展的单元测试期间,如何禁用默认路由文件处理?或者如何用自定义路由文件替换默认路由?

我试图使用,但我发现
路由器未找到
错误。显然,我犯了一些错误,我不知道在哪里


我不太了解中引用的my.application.Router和conf/my.application.routes之间的链接。除了
路由
之外的路由文件也不会被编译。

我在这里回答我自己的问题。在花更多的时间处理Play源代码之后,我找到了routes文件和生成的Router类之间的连接。希望它能帮助别人

Play的route compiler任务编译
conf
文件夹中以
.routes
结尾的所有文件以及默认的
routes
文件。生成的类名总是
路由
,但包名取决于文件名。如果文件名为
routes
(默认路由文件),则编译的类将放置在
router
包中,因此完全限定的类名为
router.routes
(这是
play.http.router
的默认值)

对于所有其他路由文件,RouteCompiler通过从文件名中删除
.routes
来派生包名。所以对于
my.test.routes
play.http.router
的值应该是
my.test.routes

这是我测试的基类,带有自定义路由器和db配置元素

public class MyTestBase extends WithApplication {
    @Override
    protected Application provideApplication() {
        Application application = new GuiceApplicationBuilder()
                .configure("db.default.driver", "org.h2.Driver")
                .configure("db.default.url", "jdbc:h2:mem:play")
                .configure("play.http.router", "my.test.Routes")
                .build();
        return application;
    }
}

如果您想完全不加载路由,那么这里有一个
特性
,如果您使用Scala、
Guice
ScalaTest
,您可以将它混入测试类中。这是在玩游戏2.5。我还展示了如何禁用过滤器,因为它们与路由相关

我知道这与Java上的ask和Play 2.4有点不同,但这可能会对人们有所帮助,因为我在回答这个问题时试图实现一些非常相似的东西

trait disabledrooting使用OneAppPerSuite扩展PlaySpec{
覆盖def fakeApplication():应用程序={
配置应用程序(新的GuiceApplicationBuilder()
.router(router.empty)
.configure(“play.http.filters”->“play.api.http.NoHttpFilters”))
.build()
}
/**覆盖以在禁用的路由上添加其他配置*/
def配置应用程序(appBuilder:GuiceApplicationBuilder):GuiceApplicationBuilder=appBuilder
}

我花了很多时间才找到你的帖子,并设法解决了这个问题。你救了我一天,谢谢!我还是不明白。我只是在“app/conf”(默认路由文件)下有一个名为“routes”的文件。我试过“路由器路由”,但没找到。我不太明白“我的测试”对应的是什么。你有一个名为my.test.route的文件吗?是的,我在测试中使用了'app/conf/my.test.routes'。你说我的“我试过”路由器“但没找到”是什么意思?如果使用“app/conf”下的默认路由文件,则不需要设置play.http.router config var。