无法让 Robotium 在 Android Studio 中工作

2023-12-20

我正在努力让 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'
    testLocalCompile 'com.google.android:android:4.1.1.4'
    testLocalCompile 'com.android.support:support-v4:13.0.+'
    testLocalCompile 'org.robolectric:robolectric:2.1.+'
    testLocalCompile 'com.jayway.android.robotium:robotium-solo:4.2'

    // Android Studio doesn't recognize the `testLocal` task, so we define the same dependencies as above for instrumentTest
    // which is Android Studio's test task
    instrumentTestCompile 'junit:junit:4.11'
    instrumentTestCompile 'com.google.android:android:4.1.1.4'
    instrumentTestCompile 'com.android.support:support-v4:13.0.+'
    instrumentTestCompile 'org.robolectric:robolectric:2.1.+'
    instrumentTestCompile 'com.jayway.android.robotium:robotium-solo:4.2'


}

task localTest(type: Test, dependsOn: assemble) {
    testClassesDir = sourceSets.testLocal.output.classesDir

    android.sourceSets.main.java.srcDirs.each { dir ->
        def buildDir = dir.getAbsolutePath().split('/')
        buildDir =  (buildDir[0..(buildDir.length - 4)] + ['build', 'classes', 'debug']).join('/')

        sourceSets.testLocal.compileClasspath += files(buildDir)
        sourceSets.testLocal.runtimeClasspath += files(buildDir)
    }

    classpath = sourceSets.testLocal.runtimeClasspath
}




check.dependsOn localTest

如您所见,我正在使用 Robolectric 和 Robotium 我遇到的问题是每当我尝试创建 Robotium 测试时,就像这样:

import android.test.ActivityInstrumentationTestCase2;

import com.dlv.testing.MainActivity;
import com.jayway.android.robotium.solo.Solo;

public class MainActivityUITest extends
        ActivityInstrumentationTestCase2<MainActivity> {

    private Solo solo;

    public MainActivityUITest() {
        super(MainActivity.class);
    }

    public void setUp() throws Exception {
        solo = new Solo(getInstrumentation(), getActivity());
    }

    public void testStuff() throws Exception {
        solo.assertCurrentActivity("Check on first Activity", MainActivity.class);
        solo.sendKey(Solo.MENU);

    }

    @Override
    public void tearDown() throws Exception {
        solo.finishOpenedActivities();
    }
}

它找不到任何导入,该项目不会在 Android Studio 中编译失败,只是在运行测试时失败,如果我删除依赖项中的类和引用,Robolectric 工作得很好


据我所知,您还无法从 Android Studio 成功运行任何测试(请参阅如何在 Android Studio 中创建测试? https://stackoverflow.com/questions/16586409/how-can-i-create-tests-in-android-studio)。您需要从命令行执行此操作(请注意,您可能需要先清理./gradlew clean):

要运行仪器测试,请使用./gradlew connectedInstrumentTest

要运行您的测试任务,请使用./gradlew localTest

为了将来当 Android Studio 更好地与测试集成配合时参考,您可以将其设置为运行任何给定的 Gradle 任务。转到“编辑配置”并单击“+”按钮添加新配置。选择“Gradle”,然后将其配置为指向正确的 gradle.build 文件和要运行的任务。不过,我不确定您会在“启动前”部分添加什么内容,如果有的话。

话虽如此,这就是我如何运行 Robotium 测试:

  1. 我使用了内置的 Instrument Test 配置,因为我无法让 localTest 任务正常工作(我遇到了与您相同的错误,无法找到任何导入)。我使用了默认的文件夹结构instrumentTest文件夹,但看起来你可以使用该行instrumentTest.setRoot('src/test')使其与您的设置相同。

  2. 我这样配置我的 build.gradle 文件:

    buildscript {
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:0.5.+'
        }
    }
    apply plugin: 'android'
    
    repositories {
        mavenCentral()
    }
    
    dependencies {
        // Included library modules
        ...
    
        // My regular dependencies
        compile 'com.android.support:support-v4:13.0.0'
        ...
    
        // Test dependencies. Notice that all I have to include is robotium
        // because the rest just works using the instrumentTest configuration
        instrumentTestCompile 'com.jayway.android.robotium:robotium-solo:4.3'
    }
    
    android {
        compileSdkVersion 17
        buildToolsVersion "18.0.1"
    
        defaultConfig {
            minSdkVersion 7
            targetSdkVersion 16
        }
    
    }
    
  3. 我在项目结构中添加了 robotsium 库(command-;在我的 mac 上)作为 Maven 库。

  4. 然后我写了一个这样的测试:

    import android.test.ActivityInstrumentationTestCase2;
    import com.example.activity.WelcomeScreen;
    import com.jayway.android.robotium.solo.Solo;
    
    public class WelcomeScreenTest extends ActivityInstrumentationTestCase2<WelcomeScreen> {
        private Solo solo;
    
        public WelcomeScreenTest() {
            super(WelcomeScreen.class);
        }
    
        protected void setUp() throws Exception {
            super.setUp();
    
            solo = new Solo(getInstrumentation(), getActivity());
        }
    
        public void testActivity() {
            // robotium assert
            solo.assertCurrentActivity("Welcome Screen", WelcomeScreen.class);
            // junit assert
            assertEquals(true, true);
        }
    }
    
  5. 然后我通过命令行运行测试./gradlew connectedInstrumentTest这对我有用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法让 Robotium 在 Android Studio 中工作 的相关文章

  • Android 卷页动画

    我对 Android 动画有点陌生 目前我正在开发一个故事活动 需要像 iPhone 中那样使用卷页动画 我发现 iPhone 中有一种方法可以做到这一点 但我仍然找不到在android中做的方法 所以请帮我解决这个问题 谢谢大家 谷歌代码
  • 如何使用 WifiEnterpriseConfig 设置“使用系统证书”

    我想为我的应用程序的用户配置企业 WiFi 网络 因此 用户必须输入用户名和密码 其余的由应用程序处理 身份验证由 RADIUS 服务器 FreeRadius 3 处理 该服务器使用 LetsEncrypt 颁发的证书 因此无需导入我自己的
  • 在Java中测试服务器是否启动的正确方法?

    简单地查看是否可以建立与网站 服务器的连接的正确方法是什么 我想要这个用于我正在编码的应用程序 如果我的网站离线 它只会提醒我 Thanks 您可以使用 HttpURLConnection 发送请求并检查响应正文中是否有该页面特有的文本 而
  • 如何在 Jetpack compose 中制作 FlipCard 动画

    我有一个现有的应用程序 我在其中使用 XML 中的 Objectanimator 实现了 FlipCard 动画 如下所示 如果我点击一张卡片 它会水平翻转 但现在我想将其迁移到 jetpack compose 那么jetpack comp
  • 使用Picasso从url保存图像?

    我正在尝试使用 API Picasso 保存图像 为了做到这一点 我正在尝试使用Target保存 但我无法完成这项工作 我怎么能这样做呢 Trying save image public static void imageDownload
  • 为什么我在 Android Studio 中使用教程应用程序时会收到“不受支持的 Gradle 版本”?

    当我尝试将教程应用程序导入 Android Studio 时 我收到以下消息 该项目正在使用不受支持的 Gradle 版本 请在项目的 Gradle 设置或项目的 Gradle 包装器中指出受支持的 Gradle 版本 如果适用 我是 An
  • Firebase Messaging FCM 在可配置的时间间隔内分发

    当您使用 FCM 向给定应用程序的所有设备发送推送时 这可能会导致许多用户同时打开他们的应用程序 从而导致大量服务器轮询 从而导致负载峰值 有没有一种方便的方法可以在给定的时间间隔内分发消息以进行计划推送 最后 我们找到了一种可能的方法 通
  • org.apache.http.conn.HttpHostConnectException:在 android 中连接到 http://localhost 被拒绝

    我正在制作一个应用程序 在执行它时将图像上传到服务器并将其数据库更新到android中的服务器 它显示错误 Connection to http localhost refused 还有更多错误 我研究了这个问题 发现不是提供 URL 连接
  • 数据未刷新“DynamiteModule:未找到 com.google.firebase.auth 的本地模块描述符类”

    我已经使用 Firebase 很长时间了 到目前为止 除了以下场景之外 一切都很好 有时我注意到我的应用程序不再获取新数据 我正在用一个活跃的监听器监听变化 并且我确实有keepSynced set to true 发生这种情况时 我会在日
  • Flutter - 删除 ListView 中项目之间的空间

    我正在使用 ListView builder 函数来创建项目列表 然而 iOS 中每个项目之间的空间很大 截图 你知道如何删除项目吗 看来是默认的 因为我没有添加它 code 列表显示 return Scaffold body ListVi
  • 从 Android 访问云存储

    我一直无法找到任何有关如何从 Android 应用程序使用云存储的具体文档 我确实遇到过这个客户端库 https cloud google com storage docs reference libraries然而 Google Clou
  • Android 解析 JSON 卡在 get 任务上

    我正在尝试解析一些 JSON 数据 我的代码工作了一段时间 我不确定我改变了什么突然破坏了代码 当我运行代码时 我没有收到任何运行时错误或警告 我创建一个新的 AsyncTask 并执行它 当我打电话时 get 在这个新任务中 调试器在此行
  • 如何使用共享首选项在两个 Android 应用程序之间共享数据?

    我有两个应用程序 App1 和 App2 我想使用共享首选项在 App1 中保存数据并在 App2 中访问 反之亦然 我可以在 App1 中保存数据并在 App2 中访问数据 但反之则不行 这就是我现在正在做的 在清单中 android s
  • Android OptionsMenu问题,背景始终透明

    我的选项菜单总是不显示背景 背景是透明的 有谁知道如何摆脱这个 我的失败起源活动是从另一个自定义活动扩展的 我在 eclipse 上有这个项目 选项菜单工作正常 但自从我迁移到 AndroidStudio 后 选项菜单始终是透明的 我尝试更
  • LinearLayout:防止最后一个孩子被之前的大文本视图推出或挤压

    我有一个LinearLayout里面有两个孩子 第一个是TextView对于动态内容 第二个是一个按钮 我的问题是按钮被推出其父级或被挤压到不再可见的程度 我想要TextView认识到其父母与第二个孩子一起没有更多空间 并开始新的一行 而不
  • 如何为 flutter 绘图应用实现橡皮擦功能

    有一个关于通过 flutter 创建绘图应用程序的视频 YouTube https www youtube com watch v yyHhloFMNNA 它支持当用户点击屏幕时绘制线 点 但我找不到像 Android 本机那样擦除用户绘制
  • 传递 Android DialogFragment 参数时,onCreateDialog 捆绑参数意外为 null

    我正在尝试使用 DialogFragment 在 Android 中显示一个基本对话框 并使用对话框消息的参数 如中所述StackOverflow线程 https stackoverflow com questions 15459209 p
  • 如何将库添加到 LIBGDX 项目的依赖项 gradle

    一切都在问题中 我已经尝试了在 SO 和其他网站中找到的所有答案 但没有运气 这就是我迄今为止尝试过的 adding compile fileTree dir lib include jar 到我的 build gradle adding
  • Android Studio 中自动打开“运行设备”选项卡

    在 Android Studio Flamingo 中有一个名为跑步设备并且它会在每次之后自动打开运行应用程序 有办法禁止这个自动打开吗 我尝试禁用启用物理 Android 设备的镜像选项 但选项卡仍然自动打开 基于此issue https
  • 应用程序关闭时单击 Firebase 通知后打开特定活动/片段

    我知道这个问题似乎重复 但根据我的要求 我在网上搜索了很多帖子 但没有任何对我有用 我的要求 我正在使用 Firebase 来获取推送通知 当应用程序打开时意味着一切正常 但我的问题是 如果有任何推送通知出现 应用程序处于后台 关闭意味着我

随机推荐

  • SQL 查询 - 如何不包含某些结果

    如果在我无法正确形式化之前提出这个问题 我深表歉意 我在表中有一个代码列 想要查询它 但删除一些带有某些特定代码的元素 假设我想获取代码从 4 开始的元素 但不包括代码第 6 个数字为 9 1121290 的元素 代码列包含最大长度为 8
  • 尝试向独立 SVG 文件添加工具提示功能时,我收到“无效的‘in’操作数样式”错误

    我正在尝试将工具提示添加到独立的 SVG 文件 但它返回以下错误 TypeError invalid in operand style Break On This Error if name in style 对于以下 jquery 2 0
  • android.support.test.espresso.PerformException:在视图上执行“加载适配器数据”时出错

    我正在使用 Espresso 来测试在搜索项目 例如自动完成 时出现的列表视图 直到用户在 SearchView 中输入内容后 列表视图才会出现 即我将 ListView 设置为View VISIBLE仅当用户在 SearchView 中输
  • 空对象设计模式问题

    我最近看了这个 YouTube 教程 http www youtube com watch v hp1Y9bhail8关于空对象设计模式 尽管其中存在一些错误 例如不执行任何操作的 NullCar 会创建无限循环 但这个概念得到了很好的解释
  • 将视点转换为 MKMapView 坐标

    我的目标是将视图的左上角和右下角转换为纬度 经度坐标 这些纬度 经度坐标将用于查询仅存在于视图中的注释位置 并非全部 5000 我找到了这个Stackoverflow 上的 Objective C 技巧 http stackoverflow
  • 什么时候调用属性?

    我对某些代码感到困惑 在班级中我有一个财产 Class A ClassB objB public int TimedValue objB Timer Inside classB I have classB public int Timer
  • 推送到不同存储库时自动触发 Travis?

    有没有办法在每次推送到存储库 Y 时触发存储库 X 的 Travis CI 构建 具体来说 我希望每次有推送时都启动我的构建http github com tensorflow tensorflow http github com tens
  • 如何列出 .so 文件中的符号

    如何列出从 so 文件导出的符号 如果可能的话 我还想知道它们的来源 例如 如果它们是从静态库中提取的 我正在使用 gcc 4 0 2 如果这有什么区别的话 列出符号的标准工具是nm 你可以像这样简单地使用它 nm gD yourLib s
  • Android - 创建Word文档

    我想创建word doc 和excelAndroid 平台上的 xls 文件 对于Excel我可以使用jexeljar 但我找不到任何用于 word 文件的 API 你能告诉我是否有任何开源 免费的API可以在android平台上编写wor
  • 如何保存 Linq-to-SQL 中的更改?

    所以 这是我对这个常见问题的独特见解 我执行查询 获取对象 然后将对象传递到表单中 并使用对象中的数据填充表单 这不是通过引用传递的 然后 我编辑 通过表单 查询的对象的值 然后返回根据表单中的值构造的新对象 然后我想将其更新到数据库 At
  • Wildfly 8 AS 中的热部署位置

    在JBoss 6 AS中 热部署位置是 JBOSS HOME server default deploy我可以在其中解压 WAR 或 EAR 并更改任何配置文件的内容 并且无需重新启动即可工作 同样 在Wildfly 8 AS中 任何人都可
  • Swift 无法定位和读取属性列表 (.plist) 文件

    我在让一个简单的命令行 OSX Swift 程序从一个简单的 plist XML 文件中读取数据时遇到了一个真正的问题 事实上 该程序甚至看不到该文件 尽管它似乎存在并复制到捆绑包中 数据由一个类处理 该类旨在读取 plist 数据并将其复
  • 如何从 highcharts 制作响应式饼图

    几天以来 我一直在尝试从 highcharts 中制作一个响应式饼图 我正在从事一个中等规模的项目 有时很容易失去概览 我已经检查过了 http www angulartutorial net 2014 03 responsive high
  • 向现有 Corda 网络添加新节点

    我正在尝试在 corda 网络中添加新节点和现有节点 我是作为文档做的 但无法实现 正如文档中所述 这足以创建一个包含 node conf 的文件夹吗 如果那么它在运行引导程序时不会更新文件夹中的数据和信息 但我可以通过添加 corda 和
  • 单元测试中的修补不起作用,正在调用实际方法

    我有一个 python 文件 update baseline manifest py 现在 我正在编写单元测试 想要修补 read file 和 write file 我已经这样做了 def update baseline manifest
  • 覆盖 dll 类属性集

    我在我的项目中使用了一千个封闭的 DllClass 实例 public sealed class DllClass public DllClass public string DllClassProperty get set DllClas
  • 获取异常 JDBC 类型没有方言映射

    我是 hibernate 和 java 的新手 我正在尝试执行本机 sql 查询 但我被卡住了 任何人都可以帮助我或检查我在哪里做错了吗 我的java代码是 try trns session beginTransaction String
  • Django 和 node.js :抛出参数[1]; // 未处理的“错误”事件

    我正在尝试 Django socket io 和 node js 示例实时 Django https github com mburst django realtime tutorial git 当我尝试从浏览器发送消息时 我从节点服务器收
  • 如何绘制具有两个刻度的 x 轴?

    我想画一个有两个刻度的x轴 如下图所示 ggplot2版本可以是这样的 library ggplot2 x c 1 2 3 4 5 10 20 30 40 50 y c 1 2 2 3 4 2 1 3 5 5 You should intr
  • 无法让 Robotium 在 Android Studio 中工作

    我正在努力让 Robotium 在基于 gradle 的 Android Studio 上工作 但我找不到方法 这是我的 build gradle 文件 buildscript dependencies repositories maven