2010-11-21 6 views
7

kullanarak beklenen istisnaların ek özelliklerini test etme Bazı Scala kodlarını test etmek için ScalaTest kullanıyorum. Şu anda buScalaTest

import org.scalatest._ 
import org.scalatest.matchers.ShouldMatchers 

class ImageComparisonTest extends FeatureSpec with ShouldMatchers{ 

    feature("A test can throw an exception") { 

     scenario("when an exception is throw this is expected"){ 
      evaluating { throw new Exception("message") } should produce [Exception] 
     } 
    } 
} 

gibi koduyla beklenen istisnalar test Ama istisna, örneğin ek bir kontrol eklemek istiyorum Özel durumlar mesajının belirli bir String içerdiğini kontrol etmek isterim.

Bunu yapmanın 'temiz' bir yolu var mı? Ya da bir try catch bloğu kullanmak zorunda mıyım?

val exception = 
    evaluating { throw new Exception("message") } should produce [Exception] 

:

cevap

16

ben gibi kesişmesine çünkü yakalanmış durum döndürür, sen değerlendirmekle benzer şeyler yapabilir

val exception = intercept[SomeException]{ ... code that throws SomeException ... } 
// you can add more assertions based on exception here 
9

bir çözüm ... sözdizimi üretmelidir bulundu Sonra istisnai inceleyin.

+0

Çalışıyor ve ben onun sözdizimi: fonksiyon sonuçları için "olması gereken" ile uyumludur. –

+0

"değerlendirme", 2.x'te kullanımdan kaldırıldı ve 3.x'te kaldırıldı. Deprecation docs 'yerine [bir istisna]' atılmasını tavsiye etti 'yerine' atılmalıdır. Ancak 3.0.0-M14 bir 'Assertion': 'val ex: Assertion = bir [İstisna] 'yı döndürür. \' Yeni istisna (" boom ")} 'a atılmalıdır. 'İstisna'yı geri almak için bir yol var mı? – kostja

2

daha fazla beklenen istisna incelemek için gerekiyorsa, bu sözdizimini kullanarak yakalayabilir: Eğer daha ileri incelemek böylece

val thrown = the [SomeException] thrownBy { /* Code that throws SomeException */ } 

Bu ifade yakalandı durum döndürür:

thrown.getMessage should equal ("Some message") 

Ayrıca, aşağıdaki gibi bir ifadede beklenen bir özel durumu yakalayabilir ve denetleyebilirsiniz:

the [SomeException] thrownBy { 
    // Code that throws SomeException 
} should have message "Some message"