2015-03-09 21 views
9

Kể từ khi phát hành 'com.android.tools.build:gradle:1.1.0' Tôi đang di chuyển hầu hết mã thử nghiệm java của mình từ androidTest đến thư mục test vì các thử nghiệm JVM nhanh hơn rất nhiều. Nhưng tôi không thể di chuyển tất cả các bài kiểm tra. Tôi thực sự cần thử nghiệm thiết bị vì một số công cụ ContentProvider.Kết hợp vùng phủ sóng của jacoco từ androidTest và kiểm tra

Tôi đã có phạm vi bảo hiểm 100% trước khi tôi bắt đầu di chuyển. Khi tôi hiện đang chạy bảo hiểm mã jacoco, tôi nhận được 40% cho thư mục androidTest và 71% cho thư mục test. Mã của tôi là 100% thử nghiệm nhưng tôi không có báo cáo bằng chứng này.

Có cách nào để kết hợp cả hai báo cáo không? Tôi tìm thấy JacocoMerge nhưng không thể làm cho nó hoạt động.

Đây là kết quả của thư mục androidTest: build/outputs/reports/coverage/debug/index.html

Và đây đầu ra của test thư mục build/reports/jacoco/generateJacocoTestReports/html/index.html tạo ra với nhiệm vụ gradle này:

def coverageSourceDirs = [ 
     '../library/src/main/java' 
] 

task generateJacocoTestReports(type: JacocoReport, dependsOn: "test") { 
    group = "Reporting" 
    description = 'Generate Jacoco Robolectric unit test coverage reports' 

    classDirectories = fileTree(
      dir: '../library/build/intermediates/classes/debug', 
      excludes: ['**//*R.class', 
         '**//*R$*.class', 
         '***/*//*$ViewInjector*.*', 
         '**//*BuildConfig.*', 
         '**//*Manifest*.*'] 
      ) 
    sourceDirectories = files(coverageSourceDirs) 
    additionalSourceDirs = files(coverageSourceDirs) 
    executionData = files('../library/build/jacoco/testDebug.exec') 
} 
+0

Nếu bạn đã tìm thấy một giải pháp cho điều này tôi sẽ đánh giá cao bất kỳ gợi ý bạn có thể cung cấp. Cảm ơn. – Kevin

Trả lời

0

Trong trường hợp bạn sử dụng Jenkins với JaCoCo plugin bạn có thể chỉ cần cấu hình tất cả các tập tin jacoco.exec và emma.ec trong "Path to exec files" để có một vùng phủ sóng kết hợp được báo cáo.

kết nốiAndroidTest sẽ dẫn đến tệp emma.ec ở đâu đó trong "đầu ra" theo mặc định.

6

Không chắc chắn nếu bạn vẫn cần điều này, nhưng gần đây tôi công bố Gradle Plugin mà có thể giúp bạn với điều đó: https://github.com/paveldudka/JacocoEverywhere

+0

Plugin thực sự hữu ích –

+0

Cảm ơn bạn, Pavel, hoạt động tuyệt vời cho tôi! – gregko

0

JacocoMerge nhiệm vụ có thể được sử dụng kết hợp 2 hoặc nhiều dữ liệu thực hiện jacoco.

Tác vụ bên dưới có thể được thêm vào tệp lớp gốc và thực thi thành công tác vụ này, dữ liệu thực thi được hợp nhất có thể được tìm thấy trong thư mục gốc xây dựng. (build/jacoco/mergeJacocoReport.exec)

evaluationDependsOnChildren() 
//Missing this might be a problem in fetching JacocoReport tasks from sub-modules. 

task mergeJacocoReport(type: org.gradle.testing.jacoco.tasks.JacocoMerge) { 
    group "Jacoco Report" 
    description "Merge Jacoco Code Coverage Report" 

    def executionFiles = fileTree("$rootProject.rootDir", { 
     includes = ['**/*.exec'] 
    }) 

    setExecutionData(executionFiles) 

} 

subprojects.each { $project -> 
    def tasks = $project.tasks.withType(JacocoReport) 

    if (tasks != null) { 
     mergeJacocoReport.dependsOn << tasks 
    } 
} 
Các vấn đề liên quan