2013-10-10 5 views
5

मैं एंड्रॉइड यूनिट परीक्षणों के लिए awesome plugin from Jake Wharton का उपयोग कर रहा हूं। इन यूनिट परीक्षणों को चलाने के लिए परेशानी लेने का मेरा उद्देश्य गति (टीडीडी त्वरित प्रतिक्रिया और सभी) के लिए है।अन्य परियोजना निर्भरताओं को लोड किए बिना ग्रेडल से एक एकल एंड्रॉइड (इकाई) परीक्षण चलाएं

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 लगता है: हालांकि मैं निम्नलिखित उत्पादन नोटिस जब भी मैं परीक्षण चलाने

./gradlew test 

:

मैं इसे सही ढंग से कॉन्फ़िगर और कुछ नमूना चल परीक्षण के लिए इस प्रकार का प्रबंधन कर लिया है मेरी परियोजना के लिए सभी निर्भरताओं को लोड करना।

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); 
    } 
} 

यह परीक्षण वास्तव में चलाने के लिए एक दूसरे के एक अंश ले जाना चाहिए:

मेरे नमूना टेस्ट इस प्रकार है। मेरी समझ यह है कि परियोजना निर्भरताओं की सभी प्री-लोडिंग इसे कम कर रही है।

अच्छा दिनों में, मुझे यकीन है कि मैं मैं CLASSPATH में क्या जरूरत है और सिर्फ कुछ समय के लिए चलाना होगा:

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

ध्यान में रखते हुए इस Gradle के साथ एक Android परियोजना है, मैं मैं होता संभालने कर रहा हूँ कुछ अलग करने के लिए जैसे कि ग्रेबल बिल्ड फ़ाइल में विशिष्ट कार्य बनाएं, जिसमें केवल मेरे नमूना प्रोजेक्ट के लिए मेरी टेस्ट फाइलें शामिल हों, और उसके बाद एक ग्रेडल कमांड चलाएं ./gradlew taskName?

प्रश्न: यह एक परीक्षण "AdditionOperationsTest" मेरी परियोजना (com.mycompany.mysampleapp) के संदर्भ में चलाने के लिए अकेले इतना है कि यह बाह्य परियोजना निर्भरता

यहाँ लोड नहीं करता है संभव है कि मेरे विन्यास फ़ाइलें इस समय देखने की तरह:

# 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

मैं इसी समस्या को हल करने की कोशिश कर रहा हूं। मुझे लगता है कि ऐसा करना बहु-मॉड्यूल प्रोजेक्ट होना है ताकि परीक्षण एक अलग मॉड्यूल में मौजूद हो, लेकिन मुझे आशा है कि यह आवश्यक नहीं होगा। – Turnsole

+0

हाँ मैं वास्तव में अपने परीक्षणों को विभिन्न मॉड्यूल में तोड़ना नहीं चाहता हूं। मुझे लगता है कि हम अपनी पूरी परियोजना को धीरे-धीरे स्थानांतरित करने की भलाई पर हार जाएंगे। मुझे आशा है कि यह केवल कुछ मूर्खतापूर्ण पैरामीटर है जिसे मुझे जोड़ना है या कार्य करना है जिसे मुझे घोषित करना है, जो बाहरी परियोजना निर्भरताओं को अनदेखा कर देगा और सटीक परीक्षण चलाएगा जिसे मैं इंगित करता हूं और केवल निर्भरता की आवश्यकता होती है। –

उत्तर

4

आप -acommand line option (कोई परियोजना निर्भरता के पुनर्निर्माण) का उपयोग करके ऐसा करने में सक्षम होना चाहिए। gradle -a test निष्पादित करने के परिणामस्वरूप libraries:facebook और mysampleapp परियोजनाओं का पुनर्निर्माण नहीं किया जाना चाहिए।

संपादित करें: जैसा कि नीचे बताया गया है, आप Gradle daemon का उपयोग कर अपने ग्रैडल बिल्ड के प्रदर्शन में काफी सुधार कर सकते हैं।

+0

धन्यवाद बेंजामिन, वाह जो पूरी तरह से सही है। तर्क जोड़कर सुनिश्चित किया गया कि फेसबुक lib का पुनर्निर्माण नहीं किया गया था। हालांकि मुझे पता है कि मैंने केवल कुछ mseconds बंद कर दिया। नाटकीय रूप से मेरे परीक्षण को तेजी से चलाने में नाकाम रहे :(कोई भी सुझाव जो आप परीक्षण को तेजी से चलाने के लिए प्रदान कर सकते हैं उदाहरण के लिए केवल निर्भरताओं की आलसी लोडिंग की तरह ही? परीक्षण मैंने "ढांचे" के किसी भी हिस्से का उपयोग नहीं किया है और इसलिए वास्तव में तेजी से चलना चाहिए था। चीयर्स। –

+0

ऐसा नहीं है कि मुझे पता है। आपका परीक्षण कितना समय लगता है? आप शायद यह देखना चाहें कि वास्तव में इस समय क्यों लगता है (उदाहरण के लिए परीक्षण कॉल करता है बाहरी प्रणालियों के लिए)। –

+0

कुल समय: 10.612 सेकेंड। मुझे लगता है कि सेटअप के साथ और अधिक करना है क्योंकि टेस्ट क्लास प्रति कहना सिर्फ एक डमी टेस्ट क्लास है (ठीक उसी तरह जैसा मैंने प्रश्न में पोस्ट किया था) जिसे तत्काल चलाना चाहिए। मुझे लगता है कि ग्रेडल एक एकल परीक्षण चलाने से पहले पूरी परियोजना तैयार करने के लिए पुनर्मूल्यांकन/पुनर्मूल्यांकन या कुछ कर रहा है। –

संबंधित मुद्दे