2015-08-21 15 views
6

Tôi đã tìm thấy sbt-groovy plugin và nó biên dịch chính xác cả kiểm tra và các nguồn chính tốt. Tuy nhiên, khóa definedTests luôn trống; SBT không bao giờ phát hiện ra bất kỳ thử nghiệm groovy nào. Tôi đã xác minh điều này với một đơn rất đơn giản src/test/groovy/Test.groovy với một phương thức được chú thích là @Test cần được chọn bởi junit-interface.Làm thế nào để có được sbt để nhận các bài kiểm tra viết bằng groovy?

Tôi nghĩ rằng gốc của vấn đề là plugin sbt-groovy cần xác định tác vụ "definedTests" trong own plugin source code. Nhiệm vụ này cung cấp Seq[TestDefinition].

Nhìn vào cách thức SBT tự điền chuỗi trình tự, nó sử dụng đầu ra bổ sung từ trình biên dịch scala (cũng xảy ra để biên dịch các tệp java, vì vậy nó hoạt động ra khỏi hộp cho java) trong lớp Analysis. số IncrementalCompiler

Tôi đã fiddled around with the taskdef, nhưng tôi không chắc chắn mình có đang đi đúng hướng hay không. Tài liệu về nội dung này khá thưa thớt hoặc được kết nối nhiều với số IncrementalCompiler.

Tôi cần mã nào trong sbt-groovy để tạo ra Seq[TestDefinition] thỏa mãn SBT để tôi có thể chạy thử nghiệm (được giao diện junit chọn) được viết bằng Groovy?

Trả lời

2

Mã phát hiện thử nghiệm nằm trong Tests.discover, mà bạn có thể quan tâm. Dường như tất cả những gì bạn cần là danh sách các phương pháp có chú thích và danh sách các lớp con. Nếu bạn có cách nào đó để tìm ra chúng, bạn có thể bắt chước những gì đang xảy ra trong mã.

Mã khám phá, như bạn đã đề cập, dựa trên kiểu dữ liệu Analysis, là ruột bên trong của trình biên dịch gia tăng. Bạn có thể tận dụng lợi thế của thực tế là nó là sbt (không phải trình biên dịch Scala hoặc Java) có trách nhiệm biên dịch gia tăng. Để biên dịch Java, AnalyzingJavaCompiler.compile gọi trình biên dịch và sau đó thực hiện phân tích.

Về lý thuyết, bạn có thể xác định AnalyzingGroovyCompiler sử dụng cùng một cơ chế làm cơ chế được sử dụng để biên dịch Java. Điều này không chính xác là một bước đi trong công viên kể từ một số bộ phận được ẩn đằng sau private[sbt]. Câu chuyện dài ngắn, tôi đặt cùng một khái niệm chứng minh hacky của khái niệm mà wrangles các trình biên dịch gia tăng vào tạo ra Analysis cho mã Groovy, và đã có thể phát hiện một thử nghiệm.

Tôi chỉ thử nghiệm với trường hợp sử dụng đơn giản một

import org.junit.Test 
import org.junit.Assert 

class Foo { 
    @Test 
    public void foo() { 
    Assert.assertEquals(1, 2) 
    } 
} 

Chạy test từ SBT yeilds đầu ra sau đây:

> test 
[info] Start Compiling Test Groovy sources : /Users/xxx/sbt-2167-groovy/src/test/groovy 
[error] Test Foo.foo failed: expected:<1> but was:<2>, took 0.062 sec 
[error] Failed: Total 1, Failed 1, Errors 0, Passed 0 
[error] Failed tests: 
[error]   Foo 
[error] (test:test) sbt.TestsFailedException: Tests unsuccessful 
[error] Total time: 1 s, completed Aug 23, 2015 5:05:01 AM 

Nó có thể không hoạt động với các phiên bản tương lai của sbt. Emptor caveat.

+0

Điều gì xảy ra nếu không có mã kiểm tra? Tôi đang chạy vào một vấn đề tương tự mà Tests.discover không tìm thấy bất kỳ vì ... không có mã nguồn ở tất cả! Điều này tương tự như các câu hỏi sau: http://stackoverflow.com/questions/16389446/compile-tests-with-sbt-and-package-them-to-be-run-later http://stackoverflow.com/câu hỏi/22073998/chạy thử nghiệm-từ-jar-với-sbt-testonly-in-sbt –

Các vấn đề liên quan