草庐IT

android - 在 TestCase 中启动第二个 Activity (这不是被测 Activity )

coder 2023-12-15 原文

如何在 ActivityInstrumentationTestCase2 或 InstrumentationTestCase 中启动第二个(模拟) Activity ?

我的问题是:

Intent intent = new Intent(getInstrumentation().getContext(), MyMock.class);
myMock = (MyMock) getInstrumentation().startActivitySync(intent);

...导致错误“进程中的 Intent ...解析为不同的进程...测试”。 对 Intent 使用 getTargetContext() 会导致“无法解析 Intent Activity ”,因为我的模拟类不是应用程序包的一部分。

08-07 19:38:25.822: INFO/TestRunner(2656): ----- begin exception -----
08-07 19:38:25.822: INFO/TestRunner(2656): java.lang.RuntimeException: Unable to resolve activity for: Intent { cmp=com.cocktails/.test.recipes.RecipeBookMock }
08-07 19:38:25.822: INFO/TestRunner(2656):     at android.app.Instrumentation.startActivitySync(Instrumentation.java:447)
08-07 19:38:25.822: INFO/TestRunner(2656):     at com.cocktails.test.recipes.RecipeUpdaterTest.testNewRecipe(RecipeUpdaterTest.java:55)
08-07 19:38:25.822: INFO/TestRunner(2656):     at java.lang.reflect.Method.invokeNative(Native Method)
08-07 19:38:25.822: INFO/TestRunner(2656):     at java.lang.reflect.Method.invoke(Method.java:521)
08-07 19:38:25.822: INFO/TestRunner(2656):     at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:191)
08-07 19:38:25.822: INFO/TestRunner(2656):     at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:181)
08-07 19:38:25.822: INFO/TestRunner(2656):     at junit.framework.TestCase.runBare(TestCase.java:127)
08-07 19:38:25.822: INFO/TestRunner(2656):     at junit.framework.TestResult$1.protect(TestResult.java:106)
08-07 19:38:25.822: INFO/TestRunner(2656):     at junit.framework.TestResult.runProtected(TestResult.java:124)
08-07 19:38:25.822: INFO/TestRunner(2656):     at junit.framework.TestResult.run(TestResult.java:109)
08-07 19:38:25.822: INFO/TestRunner(2656):     at junit.framework.TestCase.run(TestCase.java:118)
08-07 19:38:25.822: INFO/TestRunner(2656):     at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:164)
08-07 19:38:25.822: INFO/TestRunner(2656):     at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:151)
08-07 19:38:25.822: INFO/TestRunner(2656):     at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:425)
08-07 19:38:25.822: INFO/TestRunner(2656):     at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1520)
08-07 19:38:25.832: INFO/TestRunner(2656): ----- end exception -----

最佳答案

测试应用程序不是传统意义上的“应用程序”,不能启动自己的 Activity 。如果您需要测试您的 Activity 如何响应发送给它的 Intent 的其他 Activity,您可以在实际调用 getActivity() 之前使用 ActivityInstrumentationTestCase2.setActivityIntent(Intent) 方法注入(inject)您想要测试的各种 Intent。

public class ExampleTest extends ActivityInstrumentationTestCase2 {

    // if your test runs on the UI thread, you will need to setActivityIntent() 
    // in setUp() as you won't have a chance to do it before the activity
    // is started

    // @UiThreadTest
    public void testMockIntent() {
        setActivityIntent(new Intent());
        Activity foo = getActivity();

        assertNotNull(foo); // your tests
    }
}

关于android - 在 TestCase 中启动第二个 Activity (这不是被测 Activity ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6973295/

有关android - 在 TestCase 中启动第二个 Activity (这不是被测 Activity )的更多相关文章

  1. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  2. UE4 源码阅读:从引擎启动到Receive Begin Play - 2

    一、引擎主循环UE版本:4.27一、引擎主循环的位置:Launch.cpp:GuardedMain函数二、、GuardedMain函数执行逻辑:1、EnginePreInit:加载大多数模块int32ErrorLevel=EnginePreInit(CmdLine);PreInit模块加载顺序:模块加载过程:(1)注册模块中定义的UObject,同时为每个类构造一个类默认对象(CDO,记录类的默认状态,作为模板用于子类实例创建)(2)调用模块的StartUpModule方法2、FEngineLoop::Init()1、检查Engine的配置文件找出使用了哪一个GameEngine类(UGame

  3. 【Java 面试合集】HashMap中为什么引入红黑树,而不是AVL树呢 - 2

    HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候

  4. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  5. ruby-on-rails - 只有当不是 nil 时才执行映射? - 2

    如果names为nil,则以下中断。我怎样才能让这个map只有在它不是nil时才执行?self.topics=names.split(",").mapdo|n|Topic.where(name:n.strip).first_or_create!end 最佳答案 其他几个选项:选项1(在其上执行map时检查split的结果):names_list=names.try(:split,",")self.topics=names_list.mapdo|n|Topic.where(name:n.strip).first_or_create!e

  6. ruby - 如何跳过 CSV 文件的第一行并将第二行作为标题 - 2

    有没有办法跳过CSV文件的第一行,让第二行作为标题?我有一个CSV文件,第一行是日期,第二行是标题,所以我需要能够在遍历它时跳过第一行。我尝试使用slice但它会将CSV转换为数组,我真的很想将其读取为CSV,以便我可以利用header。 最佳答案 根据您的数据,您可以使用另一种方法和skip_lines-option此示例跳过所有以#开头的行require'csv'CSV.parse(DATA.read,:col_sep=>';',:headers=>true,:skip_lines=>/^#/#Markcomments!)do|

  7. ruby-on-rails - Rails 格式验证——字母数字,但不是纯数字 - 2

    什么是测试格式验证的最佳方法让我们说一个用户名,使用字母数字的正则表达式,但不是纯数字?我一直在我的模型中使用以下验证validates:username,:format=>{:with=>/^[a-z0-9]+[-a-z0-9]*[a-z0-9]+$/i}数字用户名(例如“342”)通过了验证,这是我不想要的。 最佳答案 您想“向前看”一封信:/\A(?=.*[a-z])[a-z\d]+\Z/i 关于ruby-on-rails-Rails格式验证——字母数字,但不是纯数字,我们在Sta

  8. ruby - 强制浏览器下载文件而不是打开文件 - 2

    我要下载http://foobar.com/song.mp3作为song.mp3,而不是让Chrome在其native中打开它浏览器中的播放器。我怎样才能做到这一点? 最佳答案 您只需要确保发送这些header:Content-Disposition:attachment;filename=song.mp3;Content-Type:application/octet-streamContent-Transfer-Encoding:binarysend_file方法为您完成:get'/:file'do|file|file=File.

  9. ruby - 更改 $LOAD_PATH 时,为什么使用 unshift 而不是 push? - 2

    我发现ruby加载路径是一个数组,很多项目都是这样使用的:$:.unshift(File.expand_path("../../lib",__FILE__))可以将本地文件添加到ruby路径数组的前面,方便我们require或者load。所以,我希望知道为什么我们不使用push将文件添加到数组的末尾? 最佳答案 假设您有一个“date.rb”文件(为什么不呢)并且您想要加载这个文件,而不是标准库日期。如果您使用追加,当您调用require'date'时您的文件将永远不会被加载,因为它位于数组的末尾并且标准日期会在之前找到。因此,如果

  10. ruby - 使用 Capistrano 启动 sidekiq - 2

    我想用Capistrano启动sidekiq。下面是代码namespace:sidekiqdotask:startdorun"cd#{current_path}&&bundleexecsidekiq-c10-eproduction-Llog/sidekiq.log&"pcapture("psaux|grepsidekiq|awk'{print$2}'|sed-n1p").strip!endend它执行成功但sidekiq仍然没有在服务器上启动。输出:$capsidekiq:starttriggeringloadcallbacks*2014-06-0315:03:01executing`

随机推荐