gpt4 book ai didi

android - 如何在 Android Studio 1.0 中设置 Robolectric

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:37:24 25 4
gpt4 key购买 nike

我是一名 Android 开发者,对 TDD 充满热情。最近,我了解到一个新的测试框架Robolectric,它似乎比Android Studio 默认提供的JUnit 3 解决方案要优越得多。我想设置它,但经过多次尝试、失败和 java.lang.RuntimeException: Stub! 我一无所获。

这是我的问题:

如何在 Andoird Studio 1.0 上逐步设置 Robolectric 测试框架?请注意:

  • 我不需要模糊的想法或提示。我需要一个完整的解决方案。
  • 我无法提供我之前尝试的任何代码,因为它没有用并且已经被删除。

这个框架的设置非常有问题,并且在不同版本的 Android Studio 和 IntelliJ 之间存在许多问题。我浏览了所有这些,但无济于事。我需要在 Android Studio 1.0 上成功使用该框架的人的帮助。

最佳答案

编辑:

在这几个月里,Android Studio 的 Robolectric 设置过程有了很大改进,所以在尝试下面的“长”方法之前,只需尝试官方指南 here ! :-)


好的,我成功设置了它!它非常棘手,并且与最新的 Gradle 1.0.0 不完全兼容,但它的工作就像一个魅力!

我的解决方案主要基于this tutorial

因此,您的 build.gradle 文件(项目文件夹内的“内部”文件)应如下所示:

buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.14.1'
classpath 'org.robolectric:robolectric-gradle-plugin:0.14.0'
}
}

allprojects {
repositories {
mavenCentral()
maven { url 'https://oss.sonatype.org/content/repositories/snapshots' }
}
}

apply plugin: 'com.android.application'
apply plugin: 'robolectric'


android {
compileSdkVersion 21
buildToolsVersion "21.1.1"
defaultConfig {
applicationId '[your app id]'
minSdkVersion 9
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
sourceSets {
androidTest.setRoot('src/androidTest') // This one is important, make sure to avoid typos in it, or you will get empty tests
}
lintOptions {
abortOnError false
disable 'InvalidPackage'
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
}
}

dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:21.0.2'

// ================== TESTING LIBRARIES ======================
androidTestCompile 'junit:junit:4.10'
androidTestCompile 'org.robolectric:robolectric:2.4'
androidTestCompile 'org.bouncycastle:bcprov-jdk15on:1.50'
}

robolectric {
// configure the set of classes for JUnit tests
include '**/*Test.class' //Make sure you call all your test classes according to this expression!!!

// configure max heap size of the test JVM
maxHeapSize = "2048m"
}

apply plugin: 'jacoco'

jacoco {
toolVersion = "0.7.1.201405082137"
}

def coverageSourceDirs = [
'../app/src/main/java'
]

task jacocoTestReport(type: JacocoReport, dependsOn: "testDebug") {
group = "Reporting"

description = "Generate Jacoco coverage reports"

classDirectories = fileTree(
dir: '../app/build/intermediates/classes/debug',
excludes: ['**/R.class',
'**/R$*.class',
'**/*$ViewInjector*.*',
'**/BuildConfig.*',
'**/Manifest*.*']
)

additionalSourceDirs = files(coverageSourceDirs)
sourceDirectories = files(coverageSourceDirs)
executionData = files('../app/build/jacoco/testDebug.exec')

reports {
xml.enabled = true
html.enabled = true
}

}

它看起来很像“外部”build.gradle 文件,但所有这些东西都必须就在这里。

有些元素在这里是不需要的,但我尽力将其缩减到核心部分。在你这样做之后,一个测试类是这样创建的:

import android.app.Activity;

import junit.framework.Assert;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;


@Config(emulateSdk = 18, reportSdk = 18) //Those are required as the framework does not yet support higher API levels
@RunWith(RobolectricTestRunner.class)
public class RoboDummyTest {

@Test
public void testActivityFound() {
Activity activity = Robolectric.buildActivity(MainActivity.class).create().get();

Assert.assertNotNull(activity);
}
}

当然所有数据都是 stub :-)

最后,通过在 Android Studio 的终端中输入 gradlew test 来运行测试。结果将保存到项目的 build 目录中的 html 文件中。

我希望这对任何计划使用 Android Studio 1.0 设置 Robolectric 的人有所帮助。快乐的 TDD!

编辑:我用来写答案的博客文章的作者 Kvandermast 非常友好地提供了以下指向包含工作示例的存储库的链接,该示例在每次 Android Studio 更新时都会更新: https://github.com/kvandermast/my-robolectric-app

关于android - 如何在 Android Studio 1.0 中设置 Robolectric,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27469101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com