4

Cucumber では、ステップ定義クラス間で変数を渡すにはどうすればよいですか。Scalaで実装しようとしています。

周りを見回すと、Guice や Picocontainer、その他の DI フレームワークの使用を提案する人がいます。しかし、実際には Scala での例に出くわしたことはありません。

たとえば、以下の例では、 DI を使用して変数を渡すにはどうすればよいですか?

Provider.scala、

class Provider extends ScalaDsl with EN with Matchers with WebBrowser {
  ......

  When("""I click the Done button$""") {
    val doneButton = getElement(By.id(providerConnectionButton))
    doneButton.click()
  }

  Then("""a new object should be created successfully""") {
    // Pass the provider ID created in this step to Consumer definition
  }
}

Consumer.scala、

class Consumer extends ScalaDsl with EN with Matchers with WebBrowser {
  ......

  When("""^I navigate to Consumer page$""") { () =>
    // providerId is the id from Provider above
    webDriver.navigate().to(s"${configureUrl}${providerId}")
  }
}
4

1 に答える 1

2

ThreadLocal を使用して問題を解決できます

ソリューションのコード スニペットを次に示します。

object IDProvider{
      val providerId = new ThreadLocal[String]
      def getProviderId: String = {
           providerId.get()
      }

      def setProviderId(providerId: String): Unit = {
           providerId.set(providerId)
      }
}

異なるステップ定義間で providerID にアクセスするため。IDProvider.getProviderIdを呼び出すだけです。

providerID の値を設定するには、単にIDProvider.setProviderId( PROVIDER_ID )を呼び出します。

于 2017-04-17T05:32:49.197 に答える