पर नहीं डाला जा सकता है, मैं अपने कोडबेस को Gradle 2.2 और Android Studio 1.0 में अपग्रेड करने पर काम कर रहा हूं। मैं वर्तमान में Robolectric 2.4 काम करने की कोशिश कर रहा हूं, लेकिन जब मैं यूनिट टेस्ट को चलाने और चलाने का प्रयास करता हूं तो मुझे एक अजीब समस्या का सामना करना पड़ रहा है। समस्या केवल gradle clean
के बाद होती है; टेस्ट सूट को कई बार चलाने से गुजरने वाले परीक्षण (अपेक्षित) उत्पन्न होंगे।क्लासकास्ट अपवाद: NoClassDefFoundError को RuntimeException
java.lang.ClassCastException: java.lang.NoClassDefFoundError cannot be cast to java.lang.RuntimeException
मैं इस कॉल के लिए वापस त्रुटि का पता लगाया है:: जब मैं एक साफ करने के बाद परीक्षण चलाने, मैं निम्नलिखित त्रुटि मिलती है
Activity activity = Robolectric.setupActivity(MainActivity.class);
मैं इस त्रुटि का सामना है कि क्या मैं Robolectric Gradle प्लगइन का उपयोग (org.robolectric:robolectric-gradle-plugin:0.14.0
) या जेसी और के एंड्रॉइड यूनिट परीक्षण प्लगइन (com.github.jcandksolutions.gradle:android-unit-test:2.1.1
)।
मैं इस मुद्दे Robolectric Github पर संदर्भित मिला, लेकिन यह नहीं लगता है जैसे अभी तक इसका समाधान कर दिया गया है https://github.com/robolectric/robolectric/issues/1385
यह समस्या भी एंड्रॉयड स्टूडियो इकाई परीक्षण प्लगइन में संदर्भित है, के तहत 'मुसीबत शूटिंग ': https://github.com/evant/android-studio-unit-test-plugin
मेरे वर्तमान नमूना कोड यहाँ है: https://github.com/KioKrofovitch/robolectric-upgrade-test
मैं कटका बिना Robolectric नमूनों पर api-एंड्रॉयड -16 परियोजना को चलाने के लिए सक्षम किया गया है इस मुद्दे को जी, हालांकि एपीआई-एंड्रॉइड -1 9 और एपीआई-एंड्रॉइड -21 परियोजनाएं अन्य कारणों से विफल रही हैं। मैं नहीं देख सकता कि वे अलग-अलग क्या कर रहे हैं ताकि उन्हें यह विफलता न हो। https://github.com/robolectric/robolectric-samples
क्या किसी को इसका कोई काम मिल गया है? दो बार परीक्षण चलाना जेनकिन्स या ट्रेविस जैसे सीआई उपकरणों के लिए अच्छा काम नहीं है।
संपादित करें: एम्बेड कोड नमूने
मेरे शीर्ष स्तर build.gradle जहाँ मैं जे.सी. और कश्मीर इकाई परीक्षण पुस्तकालय जोड़ें:
buildscript {
repositories {
mavenCentral()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.0.0'
classpath 'com.github.jcandksolutions.gradle:android-unit-test:2.1.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
मेरे परियोजना स्तर build.gradle, जहां मैं robolectric में जोड़ें:
apply plugin: 'com.android.application'
repositories {
mavenCentral()
}
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "com.example.robolectrictest"
minSdkVersion 15
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
androidTest {
setRoot('src/androidTest')
}
}
}
// Must be after Android plugin
apply plugin: 'android-unit-test'
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
//androidTestCompile 'junit:junit:4.10'
//androidTestCompile 'org.robolectric:robolectric:2.4'
// Testing frameworks
testCompile 'junit:junit:4.10'
testCompile 'org.robolectric:robolectric:2.4'
}
के रूप में टेम्पलेट यह बनाता है मेरे बहुत ही बुनियादी गतिविधि, सब कुछ छोड़ दिया गया है:
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
मेरे डमी परीक्षण, जहाँ मैं setupActivity() विधि त्रुटि के कारण मेरी ज़ोर तक नहीं पहुंच सकतीं:
@Config(emulateSdk = 18)
@RunWith(RobolectricTestRunner.class)
public class ApplicationTest {
@org.junit.Test
public void testDummy() throws Exception {
Activity activity = Robolectric.setupActivity(MainActivity.class);
assertTrue(true);
}
}
संपादित करें # 2: परीक्षण मैं से निम्न कमांड आह्वान को चलाने के लिए अपने प्रोजेक्ट के शीर्ष स्तर निर्देशिका:
./gradlew clean
./gradlew test
मैं भी Gradle आवरण के बाहर परीक्षण चलाने की कोशिश की है, और एक ही परिणाम प्राप्त
gradle clean
gradle test
क्या आप वास्तव में इस प्रश्न में प्रासंगिक कोड पेस्ट कर सकते हैं? मुझे नहीं पता कि आपकी जिथब परियोजना से कौन सी फाइलें देखी जा रही हैं। –
निश्चित रूप से, धन्यवाद! मैंने सबसे प्रासंगिक कोड स्निपेट –
सही जोड़ा है। निश्चित रूप से एक क्रमिक मुद्दा, और मुझे डर है कि मैं धीरे-धीरे के बारे में बहुत कम जानता हूं, इसलिए यह आपकी मदद करने की मेरी क्षमता से परे है। हालांकि मैंने जो किया है, वह इस सवाल में एंड्रॉइड टैग के लिए ग्रेडल टैग को प्रतिस्थापित करता है, उम्मीद है कि कुछ स्नातक विशेषज्ञ साथ आएंगे और आपका प्रश्न ढूंढेंगे। क्षमा करें कि मैं और अधिक मदद नहीं कर सका। –