2017-07-28 41 views
0

正如我們在Play中已知的那樣,每個測試(單元和功能)都位於測試文件夾中。我們怎樣才能標記我們的功能測試和單元測試,使得我們只能在一次運行中運行功能測試,而在另一次運行中只能運行單元測試?如何僅運行函數/單元測試

而且我想在不爲每種類型(即測試/單元/ ...和測試/功能/ ...)提供軟件包的情況下實現這一目標。這個解決方案的問題是讓我們說你有一個app/auth文件夾(所以一個auth包)。您的單元測試將在package unit/auth中,並且無法看到任何包私有方法/字段/類。

這樣做的正確方法是什麼? Play如何期望我們實現這一目標?

IMO,最好的辦法是做兩個測試文件夾,一個用於單元,一個用於功能。但恐怕會破壞sbt test及相關任務。

回答

1

測試中播放基於SBT

您可以測試過濾器配置build.sbt

testOptions in Test := Seq(Tests.Filter(name => name contains "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"))) 
) 

例如MyCoolIdentifierTest會運行,但MyCoolTestMyCoolidentifierTest不會。有一件事很酷的是sbt test仍然會運行所有的測試,包括你的自定義過濾器

+1

正是我一直在尋找。謝謝! – Jeep87c

0

這是我使用@tgk答案的最終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 acceptance:testsbt unit:test

相關問題