Scala 如何将测试包添加到可用源中?

Scala 如何将测试包添加到可用源中?,scala,playframework,playframework-2.0,sbt,Scala,Playframework,Playframework 2.0,Sbt,我在PlayJava项目的测试文件夹中有几个模拟类 我还将应用程序和测试文件夹中的所有类作为我的域的前缀,但这在Play 2中是允许的,可以正常工作。我的结构现在是这样的: app └ my.domain └ conf └ controllers └ models └ views build.sbt conf └ application.conf └ routes → controller-package for routes definit

我在PlayJava项目的测试文件夹中有几个模拟类

我还将应用程序和测试文件夹中的所有类作为我的域的前缀,但这在Play 2中是允许的,可以正常工作。我的结构现在是这样的:

app
 └ my.domain
   └ conf
   └ controllers
   └ models
   └ views
build.sbt
conf
 └ application.conf
 └ routes             → controller-package for routes definitions adapted to my.domain
test
 └ my.domain
   └ mock             → I want to use sources/classes in here in my app!
我的问题是:我想引用我的应用文件夹中GlobalSettings中test/My.domain.mock中的类。但如果我这么做,游戏说找不到符号

我只需在模块设置中将测试文件夹添加到我的应用程序源中,就成功地消除了IntelliJ Idea中的错误,但我不知道如何做到这一点,以便Play也能识别它。我想我必须修改build.sbt文件,我现在才知道该怎么做。如果有任何建议,我将不胜感激

编辑

根据请求,这是我当前的GlobalSettings类:

public class Global extends GlobalSettings {

    private final Injector INJECTOR = createInjector();

    @Override
    public void onStart(Application application) {
        super.onStart(application);
    }

    @Override
    public <A> A getControllerInstance(Class<A> controllerClass) throws Exception {
        return INJECTOR.getInstance(controllerClass);
    }

    private static Injector createInjector() {
        return Guice.createInjector(new AbstractModule() {

            @Override
            protected void configure() {
                bind(UrlGenerator.class).to(ProductiveUrlGenerator.class).in(Singleton.class);
                // this is the problem: since I have another MockGlobal (manually inserted as a fake-application parameter) in my test-folder, I don't really need the mocked classes here
                // but for this service in particular, I want to make sure that it's not even used in dev-mode, only productive, but as long as my MockService is in the test-folder I can't access it here
                bind(ImportantService.class).to(Play.isProd() ? ProductiveService.class : MockService.class).in(Singleton.class);
            }
        });
    }
}
我只是尝试将测试文件夹中的整个模拟包移动到app文件夹中,只将测试留在测试文件夹中,而不将模拟类留在其中。就像你说的那样,我只是觉得把它们和我的应用程序文件夹中的生产类分开会更干净


PS:我使用Guice不仅是为了测试,而且是为了在使用哪些服务时保持灵活性,以方便模块的切换。

这种行为就是这样设计的。Play项目或任何Scala/Java项目都有一个用于应用程序正常运行时的类路径和一个用于测试的类路径

正常运行时类路径包含启动应用程序所需的所有类。在游戏中,该类路径由应用程序文件夹中的类和库依赖项组成

// example for a library dependency that you can add to your classpath in build.sbt in the project directory
libraryDependencies ++= Seq(
  "com.sksamuel.elastic4s" %% "elastic4s" % "1.0.1.1"
)
测试类路径包含测试应用程序所需的所有类。正常运行时类路径无权访问测试类路径。测试类路径可以访问正常的运行时类路径,因为它需要访问这些类,以便您可以测试您的应用程序,对吗?此外,测试类路径由测试文件夹中的类和测试范围内的库依赖项组成,例如:

// import the mockito libray that you only use in testing
libraryDependencies ++= Seq(
  "org.mockito" % "mockito-core" % "1.9.5" % "test"
)
结论:
你想这么做真是奇怪。如果您在正常应用程序运行时需要一个类,只需将其移动到应用程序文件夹。在正常运行时使用测试类没有多大意义。如果您想在正常运行时使用它,那么它不是一个测试类:-

这是这样设计的。普通应用程序类路径无法访问测试类路径。你想这么做真是奇怪。如果您在正常应用程序运行时需要一个类,只需将其移动到app文件夹中即可。。好吧,我刚开始玩,如果这很奇怪,也许我只是误解了解剖学。我应该仅仅移动我的模拟类吗?例如,我正在模拟一些测试服务,这些测试是我用Guice注入到我的应用程序文件夹中的吗?这就解决了,我想,我只是觉得如果这些类在test-folder中会更干净。也许你可以说明为什么你需要在GlobalSettings中使用它们。也许你甚至不需要Guice。再多看一点,我们也许能弄明白:-好的,我编辑了,希望不会太混乱。也许我完全走错了方向@mavilein Nevermind,我放弃了添加额外源代码的奇怪计划,只是按照您的建议将运行时需要的类移动到我的应用程序文件夹中。我还改变了仅在一个GlobalSettings类中区分生产和测试GUI模块的方式,实际上这看起来比以前更干净。很抱歉给您带来困惑,谢谢您的提示。如果你愿意的话,你可以写一个很好的答案,解释一下,我会接受的;完全有道理:
// import the mockito libray that you only use in testing
libraryDependencies ++= Seq(
  "org.mockito" % "mockito-core" % "1.9.5" % "test"
)