2013-06-14 31 views
9

Tôi có một dự án Android đơn giản với các trường hợp kiểm tra.Phạm vi mã Gradle của Android

ProjNameProject 
--build.gradle 
--ProjName 
----build.gradle 

Tôi thấy rằng theo mặc định, hệ thống xây dựng mới của android cung cấp kết quả kiểm tra cơ bản theo mặc định. (Hoan hô!)

Bây giờ tôi cũng muốn xem mã vùng. Tôi biết làm thế nào để thiết lập này bằng cách sử dụng Emma và Ant script, tuy nhiên tôi không muốn chạy Ant script ở đây. Tôi cảm thấy rằng sẽ đánh bại mục đích của tôi bằng cách sử dụng hệ thống xây dựng mới.

Tôi đã thử một vài plugin Cobertura được tìm thấy trên Github. Một đặc biệt: https://github.com/stevesaliman/gradle-cobertura-plugin

Tuy nhiên nếu tôi cố gắng sử dụng plugin trong tệp xây dựng ProjName thì tôi gặp lỗi về plugin java. Tôi đọc trên tools.android.com thêm plugin java sẽ tạo ra hành vi này. Tôi không áp dụng nó để plugin cobertura phải được.
Nếu tôi cố gắng sử dụng plugin trong tệp xây dựng chính thì tôi không thấy lỗi java nhưng giờ tôi thấy:

Could not find net.sourceforge.cobertura:cobertura:1.9.4.1. 
    Required by: 
     :ProjNameProject:unspecified 

Tôi phải làm gì ??

+0

có ai đã thử sử dụng plugin chấm công clover trong dự án Android không? – SoH

+0

bản sao có thể có của [Cách nhận mã vùng phủ sóng bằng Android Studio?] (Http://stackoverflow.com/questions/18683022/how-to-get-code-coverage-using-android-studio) – 030

+2

Câu hỏi được liên kết đã được hỏi khoảng ba tháng sau khi tôi ... Vì vậy, trong thực tế đó là tiềm năng trùng lặp của tôi. – Sababado

Trả lời

7

Hỗ trợ JaCoCo đã được thêm vào plugin gradle Android v0.10 (http://tools.android.com/tech-docs/new-build-system).

Enable in the tested Build Type with testCoverageEnabled = true 

android { 
    jacoco { 
    version = '0.6.2.201302030002' 
    } 
} 

Tôi có thể nhận được bảo hiểm JaCoCo làm việc với Robolectric bằng cách theo dõi http://chrisjenx.com/gradle-robolectric-jacoco-dagger/.

apply plugin: 'android' 
apply plugin: 'robolectric' 
apply plugin: 'jacoco' 

dependencies { 
    compile fileTree(dir: 'libs', include: '*.jar') 
    compile 'com.android.support:appcompat-v7:19.1.+' 

    androidTestCompile fileTree(dir: 'libs/test', include: '*.jar') 
    androidTestCompile 'junit:junit:4.11' 
    androidTestCompile 'org.robolectric:robolectric:2.3' 
    androidTestCompile 'com.squareup:fest-android:1.0.+' 
} 

robolectric { 
    // Configure the set of classes for JUnit tests 
    include '**/*Test.class' 
    exclude '**/*AbstractRobolectricTestCase.class' 

    // Configure max heap size of the test JVM 
    maxHeapSize = "2048m" 
} 

jacoco { 
    toolVersion = "0.7.1.201405082137" 
} 

//Define coverage source. 
//If you have rs/aidl etc... add them here. 
def coverageSourceDirs = [ 
    'src/main/java', 
    'src/gen' 
] 

... 

// Add JaCoCo test reporting to the test task 
// http://chrisjenx.com/gradle-robolectric-jacoco-dagger/ 
task jacocoTestReport(type: JacocoReport, dependsOn: "testDebug") { 
    group = "Reporting" 
    description = "Generate Jacoco coverage reports after running tests." 
    reports { 
     xml.enabled = true 
     html.enabled = true 
    } 

    // Class R is used, but usage will not be covered, so ignore this class from report 
    classDirectories = fileTree(
     dir: './build/intermediates/classes/debug', 
     excludes: ['**/R.class', 
        '**/R$*.class' 
    ]) 
    sourceDirectories = files(coverageSourceDirs) 
    executionData = files('build/jacoco/testDebug.exec') 
} 
+0

xem tập lệnh được cải thiện https://gist.github.com/ultraon/54cca81ca159ed0a4a9ebf62e89c26ba – ultraon

6

hỗ trợ Emma dự kiến ​​sẽ được phát hành sớm trong mới xây dựng hệ thống Android: http://tools.android.com/tech-docs/new-build-system/roadmap

Cho đến nay không có cách nào chính thức để chạy emma với android qua gradle. Tôi đoán nhạc cụ có thể đạt được khá dễ dàng nhưng sau đó, bạn sẽ bỏ lỡ một cách để nói với Android để chạy thử nghiệm với phạm vi bảo hiểm trên. Hơn nữa, hiện tại không có cách nào (theo hiểu biết tốt nhất của tôi) để kéo xuống dữ liệu phủ sóng thời gian chạy EMMA từ thiết bị.

Dự án này có thể bạn quan tâm: https://github.com/stephanenicolas/Quality-Tools-for-Android. Nó sẽ được cập nhật ngay sau khi emma sẽ biến nó thành plugin Android Gradle.

---- UPDATE

Plugin này không có cơ hội làm việc với Android có plugin Java không tương thích với plugin Android.

+0

Trong khi [Emma plugin cho Gradle] (http://wiki.gradle.org/display/GRADLE/Plugins#Plugins-Emmaplugin) phụ thuộc vào plugin Java (và do đó [không hoạt động với plugin Android] (http: //code.google.com/p/android/issues/detail?id=56232)), [JaCoCo plugin cho Gradle] (http://wiki.gradle.org/display/GRADLE/Plugins#Plugins-GradleJacocoPlugin) dường như không phụ thuộc vào plugin Java và * nên * hoạt động. – sschuberth

+0

Bạn có thể tìm thấy một ví dụ về xây dựng Gradle được thiết kế với Jacoco trên dự án QAT được đề cập ở trên. Thời gian qua tôi đã thử mặc dù, một hồi quy ngăn chặn phiên bản mới nhất của Jacoc từ làm việc nhưng điều đó có thể đã được cố định. – Snicolas