Intellij idea 如何仅运行函数/单元测试

Intellij idea 如何仅运行函数/单元测试,intellij-idea,playframework,sbt,Intellij Idea,Playframework,Sbt,正如我们在游戏中已经知道的,每个测试(单元和功能)都位于测试文件夹中。我们如何标记我们的功能和单元测试,以便在一次运行中只运行功能测试,在另一次运行中只运行单元测试 我希望实现这一点,而不必为每种类型(意味着test/unit/…和test/functional/…)提供一个包。这个解决方案的问题是,假设您有一个app/auth文件夹(即一个auth包)。您的单元测试将位于包unit/auth中,并且无法看到任何包私有方法/字段/类 正确的方法是什么?Play期望我们如何实现这一目标 依我看,最

正如我们在游戏中已经知道的,每个测试(单元和功能)都位于测试文件夹中。我们如何标记我们的功能和单元测试,以便在一次运行中只运行功能测试,在另一次运行中只运行单元测试

我希望实现这一点,而不必为每种类型(意味着test/unit/…和test/functional/…)提供一个包。这个解决方案的问题是,假设您有一个app/auth文件夹(即一个auth包)。您的单元测试将位于包unit/auth中,并且无法看到任何包私有方法/字段/类

正确的方法是什么?Play期望我们如何实现这一目标


依我看,最好的方法是有两个测试文件夹,一个用于单元,一个用于功能。但我担心这会破坏sbt测试和相关任务。

游戏中的测试是基于sbt的

您可以使用测试过滤器配置
build.sbt

Test中的testOptions:=Seq(Tests.Filter(name=>name包含“IntegrationTest”))

这样,您就可以运行
sbt custom:test
,它只运行通过
TestsFilter
谓词的测试

lazy val CustomIntTest = config("custom") extend Test

lazy val root = (project in file(".")).enablePlugins(PlayScala)
  .configs(CustomIntTest)
  .settings(inConfig(CustomIntTest)(Defaults.testTasks):_*)
  .settings(
    testOptions in CustomIntTest := Seq(Tests.Filter(name => name.contains("Identifier")))
  )

e、 g.
mycoolidentiiertest
将运行,但
MyCoolTest
mycoolidentiiertest
不会运行。有一件很酷的事情是,
sbt test
仍然会运行所有测试,包括您的自定义过滤器

这是我使用@tgk answer的最终build.sbt配置

lazy val AcceptanceTestConfig = config("acceptance") extend Test
lazy val UnitTestConfig = config("unit") extend Test

lazy val root = (project in file(".")).enablePlugins(PlayScala)
  .configs(AcceptanceTestConfig)
  .settings(inConfig(AcceptanceTestConfig)(Defaults.testTasks):_*)
  .settings(
     testOptions in AcceptanceTestConfig := Seq(Tests.Filter(name => name.contains("Acceptance")))
   )
  .configs(UnitTestConfig)
  .settings(inConfig(UnitTestConfig)(Defaults.testTasks):_*)
  .settings(
     testOptions in UnitTestConfig := Seq(Tests.Filter(name => !name.contains("Acceptance")))
   )

让我们运行
sbt验收:test
sbt单元:test

这正是我想要的。谢谢