2013-10-10 17 views
5

Android birim testleri için awesome plugin from Jake Wharton kullanıyorum. Bu ünite testlerini çalıştırmanın zorluğunu alma hedefim, hız içindir (TDD hızlı geri besleme ve hepsi). aşağıdaki gibiDiğer proje bağımlılıklarını yüklemeden platformdan tek bir Android (birim) testi çalıştırın

Ben doğru yapılandırmak ve çalışan bazı örnek testleri yönetmek ettik:

./gradlew test 

Ben testler zaman keşke şu çıktıyı fark olsa:

Relying on packaging to define the extension of the main artifact has been deprecated and is scheduled to be removed in Gradle 2.0 
The Test.testReportDir property has been deprecated and is scheduled to be removed in Gradle 2.0. Please use the Test.getReports().getHtml().getDestination() property instead. 
The TaskContainer.add() method has been deprecated and is scheduled to be removed in Gradle 2.0. Please use the create() method instead. 
:mySampleApp:preBuild UP-TO-DATE 
:mySampleApp:preDebugBuild UP-TO-DATE 
:mySampleApp:preReleaseBuild UP-TO-DATE 
:libraries:facebook:compileLint 
:libraries:facebook:copyReleaseLint UP-TO-DATE 
:libraries:facebook:mergeReleaseProguardFiles UP-TO-DATE 
:libraries:facebook:packageReleaseAidl UP-TO-DATE 
:libraries:facebook:preBuild UP-TO-DATE 
:libraries:facebook:preReleaseBuild UP-TO-DATE 
:libraries:facebook:prepareReleaseDependencies 
:libraries:facebook:compileReleaseAidl UP-TO-DATE 
:libraries:facebook:compileReleaseRenderscript UP-TO-DATE 
:libraries:facebook:generateReleaseBuildConfig UP-TO-DATE 
:libraries:facebook:mergeReleaseAssets UP-TO-DATE 
:libraries:facebook:mergeReleaseResources UP-TO-DATE 
:libraries:facebook:processReleaseManifest UP-TO-DATE 
:libraries:facebook:processReleaseResources UP-TO-DATE 
:libraries:facebook:generateReleaseSources UP-TO-DATE 
:libraries:facebook:compileRelease UP-TO-DATE 
:libraries:facebook:processReleaseJavaRes UP-TO-DATE 
:libraries:facebook:packageReleaseJar UP-TO-DATE 
:libraries:facebook:packageReleaseLocalJar UP-TO-DATE 
:libraries:facebook:packageReleaseRenderscript UP-TO-DATE 
:libraries:facebook:packageReleaseResources UP-TO-DATE 
:libraries:facebook:bundleRelease UP-TO-DATE 
:mySampleApp:prepareComAndroidSupportAppcompatV71800Library UP-TO-DATE 
:mySampleApp:preparemySampleAppandroidLibrariesFacebookUnspecifiedLibrary UP-TO-DATE 
:mySampleApp:prepareDebugDependencies 
:mySampleApp:compileDebugAidl UP-TO-DATE 
:mySampleApp:compileDebugRenderscript UP-TO-DATE 
:mySampleApp:generateDebugBuildConfig UP-TO-DATE 
:mySampleApp:mergeDebugAssets UP-TO-DATE 
:mySampleApp:mergeDebugResources UP-TO-DATE 
:mySampleApp:processDebugManifest UP-TO-DATE 
:mySampleApp:processDebugResources UP-TO-DATE 
:mySampleApp:generateDebugSources UP-TO-DATE 

Gradle görünüyor Projem için TÜM bağımlıları yükleniyor.

package com.mycompany.mysampleapp; 

import org.junit.Test; 

import static org.fest.assertions.api.Assertions.assertThat; 

public class AdditionOperationsTest { 
    @Test public void testModulus() { 
    assertThat(1).isEqualTo(1); 
    } 
} 

Bu test aslında çalıştırmak için ikinci bir kısmını almalıdır şu şekildedir:

Benim Örnek Test olduğunu. Anlayışım, proje bağımlılıklarının ön yüklemesinin tümünün onu aşağıya çekmesidir.

iyi günlerde

, emin i CLASSPATH'e ihtiyaç ve sadece böyle bir şey ne çalıştırmak zorunda kılacak: Bu gradle sahip bir Android projesi düşünüldüğünde

javac src/test/java/main/java/com/micromobs/pkk/AdditionOperationsTest.java 
java org.junit.runner.JUnitCore com.micromobs.pkk.AdditionOperationsTest 

, ben olurdu tahmin ediyorum gradle build dosyasında, örnek projem için yalnızca test dosyalarımı içeren ve sonra bir gradle komutu çalıştırabilen belirli görevleri oluşturmak gibi biraz farklı bir şey yapmak için ./gradlew taskName?

Soru: o

İşte harici proje bağımlılıkları yüklemez böylece yalnız projemin (com.mycompany.mysampleapp) kapsamında tek bir test "AdditionOperationsTest" çalıştırmak mümkün mü nasıl benim yapılandırma

# settings.gradle 
include ':libraries:gradle-android-test-plugin' 
include ':libraries:facebook', ':mysampleapp' 

# build.gradle 
... 
apply plugin: 'android-test' 

dependencies { 
    testCompile 'junit:junit:4.10' 
    testCompile 'org.robolectric:robolectric:2.1.+' 
    testCompile 'com.squareup:fest-android:1.0.+' 
} 

# location of my test files: 
androidproj/mysampleapp/src/test/java/main/com/mycompany/mysampleapp/AdditionOperationsTest.java 
+0

Aynı sorunu çözmeye çalışıyorum. Yapmam gereken şey, çok modüllü bir projeye sahip olmak, böylece testlerin ayrı bir modülde bulunması, ancak bunun gerekli olmayacağını umuyorum. – Turnsole

+0

Evet Gerçekten farklı modüllerdeki testlerimi kırmak istemiyorum. Tüm projemizi bir araya getirmenin iyiliğini kaybedeceğimi hissediyorum. Bunu eklemem gereken bazı aptalca bir parametre ya da bildirmek zorunda olduğum bir görev, dış proje bağımlılıklarını görmezden geleceğim ve işaret ettiğim kesin testi ve yalnızca gereken bağımlılıkları çalıştırmayı umuyorum. –

cevap

4

Sen -acommand line option (hayır proje bağımlılıkları yeniden) kullanarak bunu mümkün olmalıdır: dosyaları şu anda benziyor. gradle -a test yürütülmesi, libraries:facebook ve mysampleapp projelerinin yeniden oluşturulmamasıyla sonuçlanmalıdır.

DÜZENLEME: Aşağıda belirtildiği gibi, Gradle daemon kullanarak Gradle derlemenizin performansını önemli ölçüde artırabilirsiniz.

+0

Teşekkürler Benjamin, vay bu tamamen doğru. Argümanın eklenmesi, facebook lib'in yeniden oluşturulmadığından emin oldu. Yine de fark ettim ki, sadece birkaç saniye sonra traş oldum. Test çalışmamı daha hızlı hale getirmedim :(Test çalıştırmayı hızlı bir şekilde yapabilmeniz için sağladığınız her türlü ipucu, örneğin bağımlılıkların sadece kullanıldıklarında tembel bir şekilde yüklenmesi gibi. Test ettiğim test "çerçeve" nin hiçbir parçasını kullanmıyor. gerçekten hızlı koşmalıydık.Şakalar –

+0

Bildiğim kadarıyla değil, testin ne kadar sürdüğü, o anda ne kadar sürdüğüne bakmak isteyebilirsiniz. dış sistemlere). –

+0

Toplam süre: 10.612 sn. Bence kurulumla ilgili daha fazla şey var çünkü her sınıfa göre test dersi, sadece bir kukla test dersi (soruda yazdığımla tam olarak aynı) ve anında çalışmalı. Gradle, tek bir test yapmadan önce tüm projeyi hazırlamak için yeniden hesaplama/yeniden derleme veya bir şeyler yapıyor olduğunu düşünüyorum. –