Tôi có một Play! dự án nơi tôi muốn thêm một số thông tin bảo hiểm mã. Cho đến nay tôi đã thử JaCoCo và scct. Trước đây có vấn đề là nó dựa trên bytecode, do đó nó dường như đưa ra cảnh báo về việc mất kiểm tra cho các phương thức được tự động phát bởi trình biên dịch Scala, chẳng hạn như copy
hoặc canEqual
. scct có vẻ là một lựa chọn tốt hơn, nhưng trong mọi trường hợp, tôi nhận được nhiều lỗi trong các thử nghiệm với cả hai.Phạm vi mã trên Play! dự án
Hãy để tôi dính với scct. Tôi về cơ bản nhận được lỗi cho mọi thử nghiệm cố gắng kết nối với cơ sở dữ liệu. Nhiều thử nghiệm của tôi tải một số đồ đạc vào cơ sở dữ liệu H2 trong bộ nhớ và sau đó thực hiện một số xác nhận. My Global.scala
chứa
override def onStart(app: Application) {
SessionFactory.concreteFactory = Some(() => connection)
def connection() = {
Session.create(DB.getConnection()(app), new MySQLInnoDBAdapter)
}
}
trong khi các bài kiểm tra thường được kèm theo trong một khối như
class MySpec extends Specification {
def app = FakeApplication(additionalConfiguration = inMemoryDatabase())
"The models" should {
"be five" in running(app) {
Fixtures.load()
MyModels.all.size should be_==(5)
}
}
}
Dòng running(app)
cho phép tôi chạy một thử nghiệm trong bối cảnh của một ứng dụng làm việc kết nối với một cơ sở dữ liệu trong bộ nhớ , ít nhất là thường. Nhưng khi tôi chạy các tác vụ bảo hiểm mã, chẳng hạn như scct coverage:doc
, tôi nhận được lô các lỗi liên quan đến kết nối với cơ sở dữ liệu.
gì thậm chí còn kỳ lạ hơn nữa là có ít nhất 4 lỗi khác nhau, như:
- ObjectExistsException: cache chơi đã tồn tại
- SQLException: Cố gắng để có được một kết nối từ một hồ bơi mà đã được shutdown
- Cấu hình lỗi [không thể kết nối với cơ sở dữ liệu [default]]
- không lái xe phù hợp tìm thấy cho jdbc: h2: mem: chơi thử nghiệm - 410454547
Tại sao việc chạy thử nghiệm trong cấu hình mặc định có thể kết nối với cơ sở dữ liệu, trong khi chạy trong bối cảnh scct (hoặc JaCoCo) thất bại trong việc khởi tạo bộ đệm và db?
Bằng cách này, có một điều tôi luôn coi là nghi phạm là một thực tế mà tôi tuyên bố các ứng dụng để sử dụng một 'MySqlInnoDBAdapter', nhưng các xét nghiệm chạy trên một ví dụ H2 trong bộ nhớ. Bằng cách nào đó ma thuật phải xảy ra trong 'FaekApplication', nhưng tôi tự hỏi liệu điều này có liên quan gì đến vấn đề ở bàn tay – Andrea