2013-03-15 19 views
8

Ben potansiyel uzun süren testi scalatest ile yazılı olması: Test zaman aşımı sınırı içinde bitirirTek bir testin çalışma süresi nasıl ölçülür ve gösterilir?

test("a long running test") { 
    failAfter(Span(60, Seconds)) { 
    // ... 
    } 
} 

bile, onun çalışma süresi testini çalıştırır kişiye değerli olabilir. Bu tek scalatest'in çıkışındaki belirli testin çalışma süresini nasıl ölçebilir ve görüntüleyebilirim?

Güncelleme: Şu andaki işlevimi r.v'nin yanıtındaki gibi kendi işlevimle ölçüyorum. scalatest'un bu işlevselliği sunup sunmadığını öğrenmek istiyorum.

cevap

9

-oD seçenek testin süresini verecektir. Örneğin, aşağıdakileri build.sbt sayfamda kullanıyorum.

testOptions in Test += Tests.Argument("-oD") 

DÜZENLEME:

Ayrıca bireysel koşular için aşağıdaki kullanabilirsiniz:

> test-only org.acme.RedSuite -- -oD 

http://www.scalatest.org/user_guide/using_scalatest_with_sbt bakınız.

def time[T](str: String)(thunk: => T): T = { 
    print(str + "... ") 
    val t1 = System.currentTimeMillis 
    val x = thunk 
    val t2 = System.currentTimeMillis 
    println((t2 - t1) + " msecs") 
    x 
} 

ve karavan cevabı ek olarak

test("a long running test") { 
    time("test running"){ 
    failAfter(Span(60, Seconds)) { 
    // ... 
    } 
} 
+0

Teşekkürler, bu sadece bir tek testi ve sbt'nin konfigürasyonundan bağımsız olarak ölçmek isterim. Diğer testleri ölçmeye ihtiyacım yok ve bunu her zaman ölçmek istiyorum. Bir kod bloğunu ölçmeyi ve 'info (...) 'kullanarak sınama sonunda zamanını yazdırmayı düşünüyordum. _scalatest_'ın bu seçenekle ölçüm gerçekleştirdiği için böyle bir ölçüm işlevi sunmasını umuyordum. –

+0

Soruyu düzenledim. Bilgi() bilmiyorum ama cevabın eşdeğer ve uygulanabilir olduğunu düşünün. Bilgi() nedir ve ne işe yarar? –

+0

Evet, şimdi nasıl yapıyorum, zamanım gibi kendi fonksiyonumla. (Belki de ['nanoTime'] (http://docs.oracle.com/javase/6/docs/api/java/lang/System.html#nanoTime()) biraz daha hassas olabilir.) | 'info()' sadece _scalatest_'ın çıktısına bir mesaj ekler. –

0

(ScalaTest bağımlı olmayan) her yerde kullanabilirsiniz:

Üstelik genel zaman ölçümleri için aşağıdaki işlevi tanımlayabilirsiniz Eğer multiproject'iniz varsa testOptions in Test += Tests.Argument("-oD"), build.sbt'deki kök seviyesinde çalışmaz, çünkü Test src/test/scala'ya başvurur. Alt Proje ayarlarınızın içine koymak zorundasınız.

Project(id = "da_project", base = file("da_project")) 
    .settings(
     testOptions in Test += Tests.Argument("-oDG"), 
     libraryDependencies ++= Seq(
      ... 
     ) 
    ) 
İlgili konular