2013-06-30 38 views
9

Tôi đã thêm vào một dự án một tập hợp các nguồn không có kiểm tra và tôi không muốn chúng làm hỏng số liệu thống kê kiểm tra của tôi. Tôi cấu hình Jacoco trong cách tiếp theo:Gradle Jacoco - báo cáo bảo hiểm bao gồm các lớp bị loại trừ trong cấu hình

test { 
    jacoco{ 
     excludes = ['org/bla/**'] 
     includes = ['com/bla/**'] 
     append = false 
    } 
} 

jacocoTestReport { 
    dependsOn test 
    description = "Generate Jacoco coverage reports after running tests." 
    reports { 
     xml.enabled true 
     html.enabled true 
    } 
    classDirectories = fileTree(dir: 'build/classes/main', include: 'com/bla/**') 
    sourceDirectories = fileTree(dir: 'scr/main/java', include: 'com/bla/**') 
} 

Nhưng dù sao, khi tạo báo cáo, Jacoco cũng bao gồm các lớp từ org.bla

Ai đó có thể giúp tôi?

EDIT

Sau khi một số lỗi, dường như tất cả các kết quả đầu ra mặc định được thêm vào org.gradle.testing.jacoco.tasks.JacocoReport#classDirectories trong một phương pháp riêng org.gradle.testing.jacoco.plugins.JacocoPlugin#addDefaultReportTasks

Đó là nhìn thấy được khi sử dụng mã ví dụ:

jacocoTestReport { 
    classDirectories = files('build/classes/main/com/bla') 
    println("-----------------------------------------------------------") 
    getAllClassDirs().each { File file -> 
     println(file.absolutePath) 
    } 
    println("-----------------------------------------------------------") 
    getAdditionalClassDirs().each{ File file -> 
     println(file.absolutePath) 
    } 
} 

jacocoTestReport << { 
    println("-----------------------------------------------------------") 
    getAllClassDirs().each { File file -> 
     println(file.absolutePath) 
    } 
    println("-----------------------------------------------------------") 
    getAdditionalClassDirs().each{ File file -> 
     println(file.absolutePath) 
    } 
} 

Output 
----------------------------------------------------------- 
<path_here>\build\classes\main\com\bla 
----------------------------------------------------------- 
....more text here 
----------------------------------------------------------- 
<path_here>\build\classes\main\com\bla 
<path_here>\build\classes\main 
<path_here>\build\resources\main 
----------------------------------------------------------- 

Vì vậy - câu hỏi là: có thể ghi đè bằng cách nào đó phương thức org.gradle.testing.jacoco.plugins.JacocoPlugin#addDefaultReportTasks hoặc ghi đè hoàn toàn lớp org.gradle.testing.jacoco.plugins.JacocoPlugin không?

Trả lời

10

Ok, tìm thấy một workaround:

jacocoTestReport.doFirst{ 
    classDirectories = files('build/classes/main/com/bla') 
} 

này ghi đè classDirectories thiết lập bởi lớp JacocoPlugin.

+0

Đây có phải là chỉ tho se 'classDirectories'? –

+0

Xin lỗi, đã lâu lắm rồi, tôi không cập nhật tình trạng mới nhất của dự án. – StKiller

+0

Tôi đã kết thúc câu hỏi của riêng mình tại đây: http://stackoverflow.com/questions/29887805/filter-jacoco-coverage-reports-with-gradle. –

-1

Nếu bạn có một cái gì đó tên công việc khác hơn

test 

chạy kiểm tra đơn vị, bạn sẽ có thể tạo báo cáo thêm các nhiệm vụ sau đây để tập build.gradle của bạn:

jacocoTestReport { 
    group = "Reporting" 
    description = "Generates Jacoco coverage reports for unit tests" 
    executionData = files('build/jacoco/unitTest.exec') 
    reports { 
     html.destination = 'build/reports/coverage' 
    } 
} 

Điều này cần phải được gọi một cách rõ ràng sau khi nhiệm vụ chạy thử nghiệm đơn vị, ví dụ:

gradle unitTest jacocoTestReport 
Các vấn đề liên quan