TL;DR
- コンパイルエラーが以下の内容なら、Finatra 2.8.0から
FunSuite
が標準になったことが原因である可能性が高い。value when is not a member of String
value in is not a member of String
- その場合、
FeatureTest
の代わりにWordSpecFeatureTest
を継承するようにすれば治る。 - しかし
WordSpecFeatureTest
はdeprecatedなので、FunSuite
に移行していくのが良いと思われる。
起こった問題
利用しているプラグインが以下のとき、
build.sbt
lazy val versions = new {
val finatra = "2.8.0"
val guice = "4.0"
val scalatest = "3.0.0"
val specs2 = "2.4.17"
}
// ...
settings(
libraryDependencies ++= Seq(
"com.twitter" %% "finatra-thrift" % versions.finatra,
"org.scalatest" %% "scalatest" % versions.scalatest % "test",
"org.specs2" %% "specs2-mock" % versions.specs2 % "test",
"com.twitter" %% "finatra-thrift" % versions.finatra % "test",
"com.twitter" %% "inject-app" % versions.finatra % "test",
"com.twitter" %% "inject-core" % versions.finatra % "test",
"com.twitter" %% "inject-modules" % versions.finatra % "test",
"com.twitter" %% "inject-server" % versions.finatra % "test",
"com.google.inject.extensions" % "guice-testlib" % versions.guice % "test",
"com.twitter" %% "finatra-thrift" % versions.finatra % "test" classifier "tests",
"com.twitter" %% "inject-app" % versions.finatra % "test" classifier "tests",
"com.twitter" %% "inject-core" % versions.finatra % "test" classifier "tests",
"com.twitter" %% "inject-modules" % versions.finatra % "test" classifier "tests",
"com.twitter" %% "inject-server" % versions.finatra % "test" classifier "tests"
)
)
// ...
Finatra 2.6.0を使っていたときは動いていたテストコードがコンパイルエラーになりました。
VerboseServiceTest.scala
package com.github.laysakura.test.finatraquill.server
import com.github.laysakura.finatraquill.idl.VerboseService
import com.github.laysakura.finatraquill.server.VerboseServiceServer
import com.twitter.finatra.thrift.{EmbeddedThriftServer, ThriftClient}
import com.twitter.inject.app.TestInjector
import com.twitter.inject.server.FeatureTest
import com.twitter.util.{Await, Future}
class EmbeddedVerboseServiceTest extends FeatureTest {
override val injector = TestInjector(
modules = Seq(
// ...
)
)
override val server = new EmbeddedThriftServer(
twitterServer = new VerboseServiceServer
) with ThriftClient
lazy private val client = server.thriftClient[VerboseService[Future]]("EmbeddedVerboseServiceTest")
"client" should {
"successfully call echo() API" in {
val res = Await.result(client.echo("hi :D"))
res shouldBe "You said: hi :D"
}
}
}
コンパイルエラー
Error:(28, 36) value in is not a member of String
"successfully call echo() API" in {
ひとまずの対応
調べていると公式のリリースアナウンスメントが見つかりました。
記載の内容に従い、 extends FeatureTest
としている箇所を extends WordSpecFeatureTest
に変更 すると、コンパイルエラーが解消されます。
VerboseServiceTest.scala
@@ -5,10 +5,10 @@
import com.twitter.inject.app.TestInjector
-import com.twitter.inject.server.FeatureTest
+import com.twitter.inject.server.WordSpecFeatureTest
import com.twitter.util.{Await, Future}
-class EmbeddedVerboseServiceTest extends FeatureTest {
+class EmbeddedVerboseServiceTest extends WordSpecFeatureTest {
override val injector = TestInjector(
ただし、 WordSpecFeatureTest
を利用している箇所でdeprecated warningが出ます。
今後はWordSpec
形式ではなく FunSuite
形式が標準になる流れ なようです。
(この点も上記のアナウンスメントに記載されています)
ちゃんとした対応
extends FeatureTest
したまま、FunSuite
形式に書き換えました。
VerboseServiceTest.scala
- "client" should {
- "successfully call echo() API" in {
- val res = Await.result(client.echo(1, "hi :D"))
- res shouldBe "Hi Ms., you said: hi :D"
- }
+ test("successfully call echo() API") {
+ val res = Await.result(client.echo(1, "hi :D"))
+ res shouldBe "Hi Ms., you said: hi :D"
広告
株式会社FOLIOでは、利用しているOSSの最新動向を追いながら開発を進められる、次世代オンライン証券を構築するエンジニアを募集中です。