2014-09-22 36 views
1

假設您更喜歡功能樣式測試框架(例如規格),並且不喜歡Java的行業標準(例如JUnit)。使用僅在scala編寫的單元/集成測試(以及用java編寫的其餘項目)來建立一個Java項目是一個好習慣嗎?這種方法有什麼缺點嗎?在單個項目中混合使用java和scala - 在java中使用scala進行測試

+0

如果你的團隊爲它,然後去爲它。 – 2014-09-22 15:41:55

+2

大多數Scala/Java互操作問題出現在Java-> Scala中。 Scala-> Java非常完美。 – 2014-09-22 15:42:22

回答

1

我有一些這方面的經驗,我們之前使用過。

缺點:

  1. 斯卡拉知識:對於觀點的開發商來看,他們不會學的太多,如果他們只寫測試Scala代碼,因爲其他一些Scala的功能,就如同隱,類型級別編程等將不會使用

  2. 類型轉換:類型轉換非常煩人。幾乎所有的Java集合都是可變的,比如ArrayList,HashMap等,但是Scala Seq,List,Map,它將作爲一個不可變的集合被導入,所以你需要通過Scala.collection.JavaConversion._ 。更不用說像Java中的BigDecimal這樣的其他類型,您還需要將其轉換爲。

  3. 慢編譯:如果您使用Specs2,它可以相對增加編譯時間,就個人而言,我認爲它可以使用隱式的太多了,每一個測試方法必須返回MatchResult的,這種類型隱含的不明確查找。如果你在沒有任何匹配器的情況下編寫測試,你可以看到隱含的未找到的錯誤。無論如何,編譯可能會很耗時。的IDE支持

  4. 缺乏做TDD,我使用的IntelliJ 13終極版,在Java中,我喜歡做TDD,這是快,但在Scala中測試,它不支持非常好,ALT +輸入犯規給了我太多有用的選項

  5. 不要嘗試,Scala代碼是用Java代碼的測試包,在你的項目中混合導入Java和Scala代碼,所以現在如果一些Java測試代碼進口Scala代碼,有可能讓IDE感到困惑。 Intellij不夠聰明,先編譯哪一個。我們也有這個問題,我們只是手動編譯Scala測試代碼,然後構建項目,但這有點令人沮喪。

我不是只使用Scala的測試的忠實粉絲。斯卡拉是一個驚人的語言,提供這麼多的功能,讓你寫富有表現力和優雅的代碼。

若干建議爲嘗試使用Scala的Java的核心項目(可以關閉話題)

的microService:據我所知,從Java核心項目我的朋友都使用微服務作爲解決方法寫Java之上的Scala代碼。但是,在某些情況下,可能會增加不必要的維護工作量。

罐子:您也可以通過創建Scala項目,然後打包jar,發佈到您的公司Nexus,然後將其導入到您的Java項目中來分離它。我認爲這是一個乾淨的解決方案,因爲它們都位於JVM之上,Dev不會投訴編譯問題。

我覺得其他人可能有類似的經歷,以及,我希望我可以學習一下:)

0

我在幾個項目中做過例如使用Spock(groovy),scala-test。這是評估,學習和使用新編程語言的非常有效的方式。
有沒有什麼缺點? 如果您的團隊使用持續集成,那麼您可能需要花一些時間來配置Maven/Gradle以包含測試和其他配置,以便CI可以構建它。

1

技術上是可能這樣做,但我不認爲這是正確的道路要走。 如果你的團隊知道/願意學習scala,那麼他們可能會希望用scala編寫整個代碼,而不僅僅是測試(至少對於新代碼來說)。
如果團隊不知道scala,學習曲線很高,並且由於測試通常限制範圍,所以他們不會從中學到很多東西。
如果您嘗試使用測試來潛入scala,那麼您可能會得到相反的效果。
scala存在問題(如強大的IDE支持,長時間的編譯,與第三方工具的集成等)。恕我直言,當你在scala中開發時,它是值得的,但如果僅限於測試,則不值得。

如果你想要的是更有效的寫作方法,我建議你使用Spock。這是一個非常好的Java和Groovy測試和規範框架。由於groovy打算讓java開發人員熟悉,他們可能會覺得使用它更加舒適。
我開始使用它之前,但後來改寫整個應用程序在斯卡拉:)

相關問題