यहाँ मेरी Android एप्लिकेशन है, जो RoboGuice का उपयोग करता है के खिलाफ Robolectric परीक्षण चलाने के लिए मेरा पूरा build.gradle है:
apply plugin: 'java'
androidJar = new File(System.getenv('ANDROID_HOME'), '/platforms/android-7/android.jar')
configurations { robo }
dependencies {
robo('com.pivotallabs:robolectric:1.0-RC1')
testCompile('org.roboguice:roboguice:1.1.2')
testCompile('junit:junit:4.8.2')
testCompile project (':app')
testCompile files(androidJar)
}
sourceSets.test.compileClasspath = configurations.robo + sourceSets.test.compileClasspath
sourceSets.test.runtimeClasspath = configurations.robo + sourceSets.test.runtimeClasspath
test {
excludes = ['**/MyRobolectricTestRunner.class']
}
मैं कोई बहिष्करण जोड़ना था परीक्षण धावक के लिए, या फिर ग्रैडल एक अपवाद फेंक देगा।
MyRobolectricTestRunner.java इस तरह दिखता है:
package com.acme.myapp;
import java.io.File;
import org.junit.runners.model.InitializationError;
import roboguice.application.RoboApplication;
import roboguice.inject.ContextScope;
import com.google.inject.Injector;
import com.xtremelabs.robolectric.Robolectric;
import com.xtremelabs.robolectric.RobolectricTestRunner;
public class MyRobolectricTestRunner extends RobolectricTestRunner {
public MyRobolectricTestRunner(Class<?> testClass) throws InitializationError {
// Tell Robolectric where to find AndroidManifest.xml and res/
super(testClass, new File("../app"));
}
/**
* Enable injection into tests as well...
*/
@Override
public void prepareTest(Object test) {
RoboApplication myApplication = (RoboApplication) Robolectric.application;
Injector injector = myApplication.getInjector();
ContextScope contextScope = injector.getInstance(ContextScope.class);
contextScope.enter(myApplication);
injector.injectMembers(test);
}
}
और यहाँ एक नमूना परीक्षण है कि दिखाता है इंजेक्शन है:
package com.acme.myapp;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import org.junit.runner.RunWith;
import roboguice.inject.InjectResource;
@RunWith(MyRobolectricTestRunner.class)
public class StringFormattingTest {
@InjectResource(R.string.info_pending_amount)
private String pendingAmountPattern;
@Test
public void testFormatInfoPendingAmount() {
String s = String.format(pendingAmountPattern, 20.0d, "EUR");
assertEquals("Only a part of your stake (20,00 EUR) was accepted", s);
}
}
स्रोत
2011-09-02 08:51:29
यह प्रलेखन कि robolectric जार एंड्रॉयड से पहले आने के लिए है में कहना है क्लासपाथ पर .jar? –
हां यह करता है। Robolectric मुख्यपृष्ठ से: "समस्या निवारण java.lang.RuntimeException: स्टब कि यकीन है कि robolectric बनाने और उसके निर्भरता classpath में एंड्रॉयड एपीआई जार से पहले दिखाई देते हैं।" –
यह ग्रहण में काम करता है, क्योंकि कोई वहां कक्षा वर्ग के क्रम को स्पष्ट रूप से नियंत्रित कर सकता है। ग्रहण परियोजना ग्रैडल द्वारा उत्पन्न की गई थी। –