2017-11-19 9 views
1

のタイムアウトは、私はそうのようなコードの行のためのタイムアウトを設定することができトレイト:scalatest Flatspec:scalatest FlatspecとTimeLimitsで、クラス全体

import org.scalatest.time.SpanSugar._ 
import org.scalatest.concurrent.TimeLimits 
import org.scalatest.FlatSpec 

class MyTestClass extends Flatspec with TimeLimits { 
    "My thread" must "complete on time" in { 
    failAfter(100 millis) { infiniteLoop() } 
    // I have also tried cancelAfter 
    } 
} 

これは、タイムアウトのために失敗する必要があります。しかし、Intellijでこのテストを実行すると、永遠に実行されます。

また、すべてのメソッドのタイムアウトを書き直す必要はありません。代わりに、クラス全体で1回構成したいと思います。 PatienceConfigはこれを行うと主張していますが、何もしていないようです。テストはまだ永遠に実行されます。

import org.scalatest.FlatSpec 
import org.scalatest.time.{Millis, Span} 
import org.scalatest.concurrent.{Eventually, IntegrationPatience} 

class MyTestClass extends Flatspec with Eventually with IntegrationPatience { 
implicit val defaultPatience = PatienceConfig(timeout=Span(100, Millis)) 

"My thread" must "complete on time" in { 
    inifiniteLoop() 
} 
} 

答えて

0

私は自分自身で解決策を探しました。十字架に来たthis答え、それは私のために働いた。 私はflatspecを使用しています、私は特性(我々はそれをオーバーライドしている)によって定義されているテストval timeLimit: Span = Span(2000, Millis) のそれぞれのための私の限界に書いたコード内で、その後の形質TimeLimitedTests

with TimeLimitedTests 

を追加しました。

override val defaultTestInterruptor: Interruptor = new Interruptor { 
override def apply(testThread: Thread): Unit = { 
    println("Kindly die") 
    testThread.stop() // deprecated. unsafe. do not use 
}} 

によって参照の回答でRumokuによって示唆されているように私はこれが

を役に立てば幸いインタラプタをオーバーライドするまで、最後にそれが動作しませんでした
関連する問題