Kodumuzu Gradle 2.2 ve Android Studio 1.0'a yükseltmek için çalışıyorum. Şu anda, Robolectric 2.4 çalışmasını almaya çalışıyorum, ancak Birim Testlerini çalıştırmayı denediğimde garip bir sorun yaşıyorum. Sorun, yalnızca bir gradle clean
; Test paketini birden çok kez çalıştırmak, geçen testleri (beklendiği gibi) üretecektir. Ben Robolectric gradle eklenti kullanmak ister ben bu hatayıClassCastException: NoClassDefFoundError RuntimeException için dönüştürülemiyor
Activity activity = Robolectric.setupActivity(MainActivity.class);
: Bu çağrıya geri hatayı takip var
java.lang.ClassCastException: java.lang.NoClassDefFoundError cannot be cast to java.lang.RuntimeException
: Temiz bir sonra testleri çalıştırdığınızda, aşağıdaki hatayı alıyorum (org.robolectric:robolectric-gradle-plugin:0.14.0
) veya JC ve K Android ünite test eklentisi (com.github.jcandksolutions.gradle:android-unit-test:2.1.1
).
Bu sorun, android stüdyo birim test eklentisinde başvuruda bulunulan, 'Sorun Çekim altında ': https://github.com/evant/android-studio-unit-test-plugin
Bulunduğum örnek kod burada: Ben seein olmadan Robolectric örnekler üzerinde api-android-16 projeyi çalıştırmak mümkün olmuştur https://github.com/KioKrofovitch/robolectric-upgrade-test
Bu sorun, api-android-19 ve api-android-21 projeleri diğer nedenlerle başarısız olsa da. Ne yaptıklarını farklı bir şekilde göremiyorum ki, bu başarısızlığı alamıyorlar. https://github.com/robolectric/robolectric-samples
Bunun için geçici bir çözüm bulunmuş mu? Testleri iki kez çalıştırmak Jenkins veya Travis gibi CI araçları için iyi bir çözüm değildir.
DÜZENLEME: katıştırma kod örnekleri JC ve K Birimi Test kütüphanesi eklemek
Benim üst düzey 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()
}
}
ben robolectric eklemek Projem seviyesi build.gradle:
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'
}
şablon bunu yaratan olarak benim çok temel Etkinlik, her şey bırakılmıştır:
Nedeniyle setupActivity() yöntemi hata benim assert alamıyorumpublic 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);
}
}
Benim kukla testi:
@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);
}
}
DÜZENLEME # 2: Ben aşağıdaki komutları çağırmak testlerini çalıştırmak için Projemin en üst düzeydeki dizini:
./gradlew clean
./gradlew test
Ben de gradle sarmalayıcı dışında testler çalıştı ve aynı sonuçları elde var
gradle clean
gradle test
İlgili kodu gerçekten bu soruya yapıştırabilir misiniz? Github projenizden hangi dosyalara bakmam gerektiğini bilmiyorum. –
Elbette, teşekkürler! En alakalı kod snippet'lerini –
Doğru ekledim. Kesinlikle bir not sorunu, ve korkarım kürsü hakkında çok az şey biliyorum, bu yüzden size yardımcı olma yeteneğimin ötesinde. Yine de yaptığım şey, sorudaki android etiketinin not etiketinin yerini tutmasıdır, bazı uzman uzmanların da gelip sorunuzu bulmasını umarız. Üzgünüm daha fazla yardım edemedim. –