2016-08-22 1 views
1

私はscalatest_2.11バージョン2.2.1を使用しています。私はSparkContextで実行されるテストを書くことを試みています。テストの開始時にSparkContextを起動し、このScをすべてのテストに使用して、すべて完了したら停止するにはどうすればよいですか?Scala:テストが終了したらどのようにアクションを実行できますか?

(私はそれ自体が停止すると仮定していることを知っているが、I'sdはまだそれを自分でやりたい)

+0

チェックアウトhttps://github.com/holdenk/spark-testing-base - それを行うとはるかに、特にhttps://github.com/holdenk/spark-testing-baseを見てみましょう/blob/master/src/main/1.3/scala/com/holdenkarau/spark/testing/SharedSparkContext.scala –

+0

これは単純なbeforeAllの例です:https://github.com/kevinmeredith/scalatest_beforeAll_testing –

答えて

3

あなたはScalaTestからBeforeAndAfterAllを使用することができます。 SparkContextを開始および停止し、他のテストで使用する基本特性を定義します。

trait SparkTest extends BeforeAndAfterAll { 
    self: Suite => 

    @transient var sc: SparkContext = _ 

    override def beforeAll { 
    val conf = new SparkConf(). 
     setMaster("local[*]"). 
     setAppName("test") 
    sc = new SparkContext(conf) 
    super.beforeAll() 
    } 

    override def afterAll: Unit = { 
    try { 
     sc.stop() 
    } finally { 
     super.afterAll 
    } 
    } 

} 

// Mix-in the trait with your tests like below. 
class MyTest extends FunSuite with SparkTest { 
    test("my test") { 
    // you can access "sc" here. 
    } 
} 
+0

(1) 'SparkTestがSuiteを持つBeforeAndAfterAllに準拠していません。 '、(2)SparkContextを' afterAll'にどのように転送すればよいですか?私は機能のアリティを変えることが許されていますか? – shakedzy

+1

完全な例で答えを更新しました。 – Jegan

+0

'@ transient'追加について詳しく教えてもらえますか?それはなぜ必要なのですか?そして、 'self:Suite'の部分で、気にしない場合は – shakedzy

関連する問題