2014-09-22 54 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开发人员熟悉,他们可能会觉得使用它更加舒适。
我开始使用它之前,但后来改写整个应用程序在斯卡拉:)