2010-11-21 39 views
7

Tôi đang sử dụng ScalaTest để thử nghiệm một số mã Scala. Tôi hiện đang thử nghiệm cho trường hợp ngoại lệ dự kiến ​​với mã như thế nàyCách kiểm tra các thuộc tính bổ sung của Ngoại lệ được mong đợi bằng ScalaTest

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] 
     } 
    } 
} 

Nhưng tôi muốn thêm kiểm tra bổ sung về ngoại lệ, ví dụ Tôi muốn kiểm tra xem thông báo ngoại lệ có chứa một Chuỗi nhất định không.

Có cách nào 'sạch' để thực hiện việc này không? Hoặc tôi có phải sử dụng khối try try?

Trả lời

16

Tôi tìm thấy một giải pháp

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

Bạn có thể làm cùng một loại điều với đánh giá ... nên sản xuất cú pháp, vì đánh chặn như thế nào, nó sẽ trả về các ngoại lệ bắt:

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

Sau đó kiểm tra ngoại lệ.

+0

Nó hoạt động và tôi thích cú pháp của mình: nó phù hợp với tất cả các "nên" cho kết quả chức năng. –

+0

'đánh giá' không được chấp nhận trong 2.x và bị xóa trong 3.x. Tài liệu không được khuyến khích sử dụng 'an [Ngoại lệ] sẽ được némBởi' thay thế. Tuy nhiên, 3.0.0-M14 trả về một 'Assertion':' val ex: Assertion = an [Exception] nên được throwBy {throw new Exception ("boom")} '. Có cách nào để lấy lại 'Exception' được ném không? – kostja

2

Nếu bạn cần phải kiểm tra thêm một ngoại lệ mong đợi, bạn có thể chụp nó sử dụng cú pháp sau:

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

Biểu thức này trả về ngoại lệ bắt để bạn có thể kiểm tra nó tiếp tục:

thrown.getMessage should equal ("Some message") 

bạn cũng có thể nắm bắt và kiểm tra ngoại lệ dự kiến ​​trong một tuyên bố, như sau:

the [SomeException] thrownBy { 
    // Code that throws SomeException 
} should have message "Some message" 
Các vấn đề liên quan