标签: android-testing

无法让Robotium在Android Studio中运行

我很难让Robotium在基于gradle的Android Studio上工作,我找不到办法

这是我的build.gradle文件

buildscript {
    dependencies {
        repositories {
            mavenCentral()
            mavenLocal()
        }

        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}

apply plugin: 'android'

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

sourceSets {
    testLocal {
        java.srcDir file('src/test/java')
        resources.srcDir file('src/test/resources')
    }
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 17
    }

    sourceSets {
        instrumentTest.setRoot('src/test')
    }
}

dependencies {
    compile 'com.android.support:support-v4:13.0.+'

    // Dependencies for the `testLocal` task, make sure to list all your global dependencies here as well
    testLocalCompile 'junit:junit:4.11' …
Run Code Online (Sandbox Code Playgroud)

android ui-testing gradle robotium android-testing

12
推荐指数
1
解决办法
1万
查看次数

java.lang.SecurityException:权限拒绝:在测试中使用UiAutomation时的getIntentSender()

每当我尝试UiAutomation在任何测试中使用时getInstrumentation().getUiAutomation(),该进程都会因此异常而崩溃:

java.lang.SecurityException: Permission Denial: getIntentSender() from pid=30334, uid=2000, (need uid=1000) is not allowed to send as package android
        at android.os.Parcel.readException(Parcel.java:1540)
        at android.os.Parcel.readException(Parcel.java:1493)
        at android.app.IUiAutomationConnection$Stub$Proxy.disconnect(IUiAutomationConnection.java:225)
        at android.app.UiAutomation.disconnect(UiAutomation.java:240)
        at android.app.Instrumentation.finish(Instrumentation.java:197)
        at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:575)
        at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1837)
Run Code Online (Sandbox Code Playgroud)

知道为什么吗?我正在使用Gradle通过Android Studio,尝试各种版本,直接调用它adb,即使没有任何外部依赖(显然至少有SDK 18)...总是崩溃.

这是我发现的唯一官方示例:https://www.youtube.com/watch?v =_SlBHUW0ybM

android android-testing android-uiautomator

12
推荐指数
2
解决办法
4384
查看次数

对于Lollipop及以上的仪器测试,"没有测试结果"

我的基于仪器(espresso)的测试不能在Lollipop +设备和模拟器上运行.它们可以在任何其他平台上正常运行 我和这个帖子中的人有相同的症状 - https://groups.google.com/forum/?fromgroups#!topic/adt-dev/QW5SuzQizNk

  • 我的测试是在src/androidTest/java /
  • 我已经设置了testInstrumentationRunner'android.support.test.runner.AndroidJUnitRunner'
  • 测试类是@RunWith(AndroidJUnit4.class)
  • 个人测试用@Test注释

我可以执行./gradlew connectedCheck并且测试在使用KitKat的设备上运行良好,但是当我尝试在Lollipop的设备上以相同的方式运行相同的测试时,我得到...

15:02:15.784 [WARN] [org.gradle.api.Task] XT1095上的测试 - 5.1失败:由于'java.lang.NoClassDefFoundError'导致仪表运行失败

15:02:16.011 [WARN] [org.gradle.api.Task] com.android.builder.testing.ConnectedDevice>未找到测试.[XT1095 - 5.1] FAILED

15:02:16.011 [警告] [org.gradle.api.Task]未找到测试.这通常意味着您的测试类不是您的测试运行器期望的形式(例如,不从TestCase继承或缺少@Test注释).

android android-testing android-espresso android-instrumentation

12
推荐指数
1
解决办法
3081
查看次数

Android SQLite数据库单元测试

我是Android应用程序开发的新手,我刚做了一个笔记应用程序.我想为数据库的insertNote,readNote和updateNote方法进行单元测试.我该怎么做?这是我的数据库的代码.谢谢.

public class  DatabaseManager extends SQLiteOpenHelper {


public static final String Database_Name = "Notes Database";
public static final String Table_Name = "notes";

public static final String Column_id = "textId";
public static final String Column_title = "textTitle";
public static final String Column_body = "textBody";

public DatabaseManager(Context context){
    super(context, Database_Name, null, 1);
}

@Override
public void onCreate(SQLiteDatabase db){
    db.execSQL("CREATE TABLE " + Table_Name + " (" + Column_id +
            " INTEGER PRIMARY KEY AUTOINCREMENT, " + Column_title +
            " TEXT, " + …
Run Code Online (Sandbox Code Playgroud)

sqlite android unit-testing android-testing android-sqlite

12
推荐指数
2
解决办法
2万
查看次数

图书馆模块'com.android.library'中的浓咖啡测试

我有一个库模块,由两个Android应用程序使用,我想将浓缩咖啡测试添加到库模块,以便两个应用程序可以运行常见的测试集.是否有一个示例可用于在库模块中添加espresso测试?

android-testing android-espresso

12
推荐指数
1
解决办法
288
查看次数

如何将Android(instrumentation)测试文件放在项目目录之外?

我有一个Android项目(由Cordova生成),我想添加(检测)测试.它只有一个MainActivity.java应该测试.

通常这意味着添加一些依赖项build.gradle/src/androidTest/java/org/example/package/MainActivityTest.java使用MainActivityTest类和一些测试方法创建文件.(在Android Studio中,我甚至可以通过使用Run - >"Record Espresso Test"生成这些 - 这非常简单且有效).

不幸的是,我现在要求这些测试文件确实存在于项目目录之外.现有的Cordova项目应该只有很小的变化(因为它被重新生成并作为构建工件处理).在MainActivity.java将最好是在同一个根文件夹,Android项目中/android.

我怎样才能做到这一点?


build.gradle变化可以被添加到build-extras.gradle,真正的文件build.gradle已经包含了,所以这是照顾.

但我不知道如何放置MainActivityTest.java项目文件夹结构的外部,仍然能够在项目内运行它.

对于iOS,您可以使用绝对路径将外部文件链接到项目中.这样的东西在这里也是完美的.

我看了,sourceSets但我不知道如何将这个集成到Cordova Android项目中,该项目已经有了这个非默认值(我想?)sourceSets:

android {
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
            jniLibs.srcDirs = ['libs']
        }
    }
    ...
}     
Run Code Online (Sandbox Code Playgroud)

android cordova android-testing android-espresso android-instrumentation

12
推荐指数
1
解决办法
1686
查看次数

Android在测试包中测试新服务

我想在框架中测试一个类,该框架基于intent启动不同的服务.但是,我有问题,创建TestService内部的androidTest/连接时,Android的测试正在运行.getService方法返回null.

在此先感谢任何指导和帮助!

@RunWith(AndroidJUnit4.class)
public class WakefulIntentSenderTest {
    private static final String SOME_ACTION = "someAction";

    private static class TestService extends Service {
        private boolean mCalled;

        @Override
        public void onCreate() {
            super.onCreate();
        }

        @Override
        public IBinder onBind(final Intent intent) {
            return null;
        }

        @Override
        public int onStartCommand(final Intent intent, final int flags, final int startId) {
            mCalled = true;
            return 0;
        }

        public boolean wasCalled() {
            return mCalled;
        }

        public class TestServiceBinder extends Binder {

        public …
Run Code Online (Sandbox Code Playgroud)

java junit android android-testing android-instrumentation

12
推荐指数
1
解决办法
449
查看次数

使用Bazel而不是Gradle的额外优势是什么?

我正在阅读有关Android Testing Samples项目的文章,并注意到一个名为Bazel的" "构建工具正用于构建Android项目:

实验性Bazel支持

其中一些示例可以在Linux上使用Bazel构建.这些示例包含一个BUILD.bazel文件,类似于build.gradle文件.外部依赖项在顶级WORKSPACE文件中定义.

这是实验性功能.要运行测试,请按照Bazel网站上的说明安装最新版本的Bazel(0.12.0或更高版本).

然后,

  • 在现有的Gradle上使用Bazel的附加优势是什么?
  • 拥有适用于Android的TWO构建工具真的很棒吗?
  • 这是否意味着Android开发人员将来可能需要学习这种新的构建工具?

更新#1:更新了farhana的接受答案,感谢Jin提供有关google构建系统的详细信息.

更新#2:更新了谷歌代码实验室,用于bazel android介绍.

android gradle android-testing android-gradle-plugin bazel

12
推荐指数
2
解决办法
2220
查看次数

活动构建变体没有测试工件

我基于“调试”构建变体创建了一个名为“bitrise”的新构建类型。使用“调试”构建变体时,已检测的 androidTests 构建并运行良好,但是当我切换到新的“bitrise”构建变体时,出现以下错误:

Process finished with exit code 1
Class not found: "com.mycompany.app.ui.race.RaceFragmentUiTest"
Run Code Online (Sandbox Code Playgroud)

当我选择“编辑配置...”->“Android Instrumented Tests”时出现此警告 警告:活动构建变体“myCompanyBitrise”没有测试工件。

版本

'com.android.tools.build:gradle:3.5.2'

安卓工作室 3.5.2

这是我的 Gradle 文件的摘录

buildTypes {
    debug {
        debuggable true
        testCoverageEnabled = false
        applicationIdSuffix ".debug"
        buildConfigField("String", "BASE_ENDPOINT", BASE_ENDPOINT_DEBUG)
    }
    release {
        minifyEnabled true
        zipAlignEnabled true
        shrinkResources true
        buildConfigField("String", "BASE_ENDPOINT", BASE_ENDPOINT_PROD)
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    bitrise {
        initWith debug
        buildConfigField("String", "BASE_ENDPOINT", BASE_ENDPOINT_PROD)
    }
}

flavorDimensions "version"

productFlavors {
    mycompany {
        dimension "version"
        applicationId "com.mycompany.app"
    }
    second {
        dimension "version"
        applicationId …
Run Code Online (Sandbox Code Playgroud)

android gradle android-testing android-gradle-plugin android-gradle-3.0

12
推荐指数
1
解决办法
3119
查看次数

如何在 Jetpack 可组合测试中获取字符串资源

我们可以通过 stringResource 来获取 Composable 中的字符串资源,例如

@Composable
fun Heading(
    @StringRes textResource: Int
) {
    Text(
        text = stringResource(id = textResource),
        color = colorBlack,
    )
}
Run Code Online (Sandbox Code Playgroud)

但是我们如何在可组合测试中获取这个字符串资源。

class HeadingTest {

    @get:Rule
    val composeTestRule = createComposeRule()

    @ExperimentalComposeUiApi
    @Test
    fun headingTest() {
        // Start the app
        composeTestRule.setContent {
            AppTheme {
                // In Compose world
                Heading(textResource = R.string.some_text)
            }
        }

        //How can I access string resource here
        composeTestRule.onNodeWithText(???).assertExists()
    }
}
Run Code Online (Sandbox Code Playgroud)

android android-testing android-jetpack android-jetpack-compose

12
推荐指数
2
解决办法
3943
查看次数