getActivity() 在我的 ActivityInstrumentationTestCase2 类中返回 null

2024-04-28

我希望我的应用程序使用 ActivityInstrumentationTestCase2 在代码中执行以下测试。问题是 getActivity() 方法返回 null。这会导致包含 getActivity() 的行正下方的行出现 NullPointerException。结果,测试无法运行。我不知道为什么要这样做。我已经尝试将 @Before 更改为 @Override 但问题仍然存在。

这是实际的测试类:

package com.example.guy.smsclassprojecttest;

import android.test.ActivityInstrumentationTestCase2;
import android.test.suitebuilder.annotation.SmallTest;
import android.widget.Button;
import android.widget.EditText;

import com.example.guy.smsclassproject.*;

import org.junit.*;
import org.junit.Test;

import java.util.ArrayList;


public class DraftsActivityTest2 extends ActivityInstrumentationTestCase2<DraftsActivity>
{
    private EditText searchText;
    private Button searchButton;
    private DraftsDatabase draftsDatabase;
    ArrayList<MessageObject> messagesToBeDisplayed;
    DraftsActivity tester;

    public DraftsActivityTest2()
    {
        super(DraftsActivity.class);

    }

    @Before
    public void setUp() throws Exception
    {

        draftsDatabase = new DraftsDatabase();
        MessageObject messageObject1 = new MessageObject("hi", "5554", true);
        MessageObject messageObject2 = new MessageObject("hi hi", "5555554", true);
        MessageObject messageObject3 = new MessageObject("sup", "5435555554", true);
        draftsDatabase.addMessage(messageObject1);
        draftsDatabase.addMessage(messageObject2);
        draftsDatabase.addMessage(messageObject3);
        messagesToBeDisplayed = draftsDatabase.getAllTexts();
        //Here is where the code crashes
        tester = getActivity();
        messagesToBeDisplayed = tester.messagesToBeDisplayed;
        searchText = (EditText) tester.findViewById(R.id.searchText);
        searchButton = (Button) tester.findViewById(R.id.searchButton);
    }

    @Test
    public void testSearch() {

        searchText.setText("hi");
        searchButton.performClick();
        messagesToBeDisplayed = draftsDatabase.getMessagesByKey(searchText.getText().toString());
        Assert.assertEquals("Messages with the word hi", 2, messagesToBeDisplayed.size());
        Assert.assertTrue(false);
    }
}

这是清单文件和 gradle 文件(如果它们有区别的话):

清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.guy.smsclassproject" >

    <uses-sdk android:minSdkVersion="10" />
    android:versionCode="1"
    android:versionName="1.0">
    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />


    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="SMS"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" >

        <!-- main menu -->
        <activity android:name=".MenuActivity" android:label="SMS">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- Drafts -->
        <activity android:name=".DraftsActivity"
            android:label="Drafts"
            android:windowSoftInputMode="adjustPan"> <!-- stops keyboard from messing up layout -->
        </activity>

        <!-- History -->
        <activity
            android:name=".HistoryActivity"
            android:label="Recent Texts"
            android:windowSoftInputMode="adjustPan"> <!-- stops keyboard from messing up layout -->
        </activity>

        <!-- Texts -->
        <activity
            android:name=".TextingActivity"
            android:label="Texting"
            android:windowSoftInputMode="adjustPan" > <!-- stops keyboard from messing up layout -->
        </activity>

        <receiver android:name=".SmsReceiver" >
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>

        <activity
            android:name=".SingleTextActivity"
            android:label="Message" >//http://stackoverflow.com/questions/2198410/how-to-change-title-of-activity-in-android--Tian
        </activity>
    </application>

</manifest>

Gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        testApplicationId 'com.example.guy.smsclassprojecttest'


    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    testOptions {

        unitTests.returnDefaultValues = true

    }

    defaultConfig
    {
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
}


dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.0'
    compile 'com.android.support:design:23.1.0'
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.0'
    androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
    testCompile 'junit:junit:4.12'
}

如果您使用的是ActivityInstrumentationTestCase2,则不需要@Before、@Test注释。

有2条路可以走:

  1. 继续使用 ActivityInstrumentationTestCase2 测试此 Activity,从代码中删除所有 @Before @Test 注释,测试用例应该可以正常运行。
  2. 不要子类化 ActivityInstrumentationTestCase2,而是使用 AndroidJUnitRunner,并通过设置活动测试规则来设置活动,如下所示

JUnit4下的测试用例:

public class DraftsActivityTest2 {

@Rule
public ActivityTestRule<DraftsActivity> mActivityRule = new ActivityTestRule<>(
        DraftsActivity.class);

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

getActivity() 在我的 ActivityInstrumentationTestCase2 类中返回 null 的相关文章

  • Android x86_64 和 x86 模拟器在 AlertDialog.onClick 事件上崩溃

    我正在 x86 64 和 x86 模拟器中测试 Android 应用程序 在从显示列表的 AlertDialog 中选择一个项目后 它崩溃了 Android 模拟器意外关闭 AlertDialog 是从 AppCompatActivity
  • 如何在 Windows Phone 8 中安装 .xap PhoneGap 版本?

    我使用phonegap android开发了一款简单的游戏 但在为Windows iOS Android 黑莓等构建后 它仅适用于Android设备 因此我可以为Android设备安装apk文件 但在Windows xap文件中未检测到Wi
  • Android 中的 JDBC 连接

    有没有人在 android 中尝试过 JDBC 连接 因为在 Android 2 3 中支持 JDBC 我必须在没有 Web 服务的情况下连接 Mysql 我已经提出申请 但它给了我错误 public class MysqlConnect
  • EDI AS2 HTTP 跟踪?

    我们正在研究 AS2 实现 并希望能够构建有意义的测试用例以与 SoapUI 或 Postman 一起使用 为了做到这一点 我们有两种方法 只是尝试从现有客户端进行 tcp 转储 跟踪调用 从普通 EDI 文档开始手动构建一些简单的调用 或
  • 如何在datepickerdialog android中选择年份?

    我是 Android 编程新手 请帮忙 我正在使用创建材料设计的片段DatePickerDialog点击EditText 问题是它设置为当前日期 由我设置 但是 如果用户必须选择过去的日期 比如说 10 年前 用户必须每月滚动 这是痛苦的
  • Rails:测试需要访问 Rails 环境的助手(例如 request.fullpath)

    我有一个可以访问的助手request fullpath 在孤立的辅助测试中 request不可用 我应该怎么办 我可以以某种方式嘲笑它或类似的东西吗 我正在使用最新版本的 Rails 和 RSpec 这是我的助手的样子 def item a
  • 我应该保留远程数据库的本地副本吗?

    我正在开发一个应用程序 基本上允许人们创建 加入和管理其他人的群组 群组内的人也可以互相发送消息 我一直在想哪条路会更好 保留包含所有信息的远程数据库 包括发送给用户和从用户发送的消息 并让应用程序在每次需要信息时查询服务器 甚至是它以前见
  • 动画图像视图

    目前我正在开发一款游戏 这是我的游戏的详细信息 用户应选择正确的图像对象 我希望图像从左到右加速 当他们到达终点时 他们应该再次出现在活动中 这是我正在处理的屏幕截图 我有 5 个图像视图 它们应该会加速 您有此类动画的示例代码吗 非常感谢
  • sqlite 插入表中 select * from

    我需要在 Android 应用程序中将数据从一个表移动到另一个表 我想使用以下sql insert into MYTABLE2 select id STATUS risposta DATETIME now data ins from MYT
  • Galaxy Nexus 4.1.1 和 ISO14443 读卡器

    是否可以在 Galaxy Nexus Jelly Bean 4 1 1 移动设备和任何常规桌面非接触式读卡器 ISO 14443 A B 之间建立连接 据我所知 android不支持卡模拟模式 所以只能通过p2p模式来完成 p2p 是否基于
  • 推送通知需要很长时间才能到达

    我在适用于 iOS 和 Android 的 Adob e Air 应用程序中遇到推送通知的奇怪问题 我正在使用 Milkman Games 的 Easy Push ANE 以及 One Signal 服务 问题是通知确实会到达 但有时 随机
  • 尝试在空对象引用上调用虚拟方法“java.lang.String org.jsoup.nodes.Element.ownText()”

    我正在使用下面的代码来获取版本名称 from 应用商店通过使用 jsoup 我正在获取详细信息 但它引发了一些异常 我的代码是 public class ForceUpdateAsync extends AsyncTask
  • Android React-Native 中 MainActivity 不存在错误

    所以我收到 MainActivity 不存在错误 这可能是因为我将包和应用程序重命名为bomber to Bomber并将 appId 更改为com bomber to cool bomber android 我检查了 AndroidMan
  • 如何自动下载 Google 签名的通用 APK 以在 Google Play 之外分发?

    我有使用 Play 应用签名的应用 我想将应用程序上传到华为应用程序库 Google 建议从捆绑资源管理器下载已签名的通用 APK 然后上传到 Google Play 之外的商店 如果您还在 Google Play 之外分发您的应用或计划
  • ViewPager 的 Android Viewholder

    您好 我正在使用 ViewPager 但我现在想保留状态 而不是重新生成单元格 我注意到 viewpager 与 listviews 的自定义适配器非常相似 它们的功能类似 listview 在单元格不再出现在屏幕上后重新生成单元格中的数据
  • DialogFragment在Android中的位置

    我有一个DialogFragment显示一个View就像弹出屏幕一样 窗口始终出现在屏幕中间 有没有办法设置位置DialogFragment窗户 我已经查看了但还没有找到任何东西 尝试这样的事情 Override public View o
  • Android:毫米或英寸尺寸的视图尺寸不正确

    我有一个布局高度为 10mm 的按钮 在大多数设备上看起来都是正确的 但在 Lg Optimus 2X 和 Motorola Defy 上 按钮的尺寸大约只有一半 我检索了这些设备上的 DisplayMetrics 信息 这是一个简短的概述
  • 按照说明后“找不到您尝试购买的商品”

    所以我按照以下说明进行操作http developer android com google play billing billing admin html http developer android com google play bi
  • 我可以在 Android Market 上出售我的 SL4A 应用程序吗?

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想使用 SL4A 在 Android 上使用 Python 开发一个应用程序 并且我想知道是否可以将其作为应用程序在 Android Market
  • Android On Focus Listener 和 On Click Listener on ImageView

    我有一个 imageview 它具有两个属性 可聚焦的 and 可聚焦触摸模式 set to true

随机推荐

  • 如何使用 TensorFlow 设置 Udacity 深度学习课程的学习环境 (Windows)

    相信很多对深度学习感兴趣的人都听说过这门课程 https www udacity com course deep learning ud730 https www udacity com course deep learning ud730
  • Jquery Sortable - 排序时禁用 onclick=""

    排序时是否可以禁用 onclick 我这里有一个工作示例http www jsfiddle net V9Euk 59 http www jsfiddle net V9Euk 59 Peter 您可以使用start and stop选项 se
  • 将所有逻辑规则与矩阵并按相同顺序匹配

    例如 我有一个像这样的矩阵 dat lt cbind 1 10 11 20 21 30 colnames dat lt paste0 x 1 ncol dat dat x1 x2 x3 1 1 11 21 2 2 12 22 3 3 13
  • 将文件添加到现有 zip 文件

    我正在使用 python 的zipfile module zip 文件位于以下路径 home user a b c test zip并在下面创建另一个文件 home user a b c 1 txt我想将此文件添加到现有的 zip 中 我这
  • 适用于 Web 照片库的正确 NoSQL 数据架构

    我正在寻找为照片库的 NoSQL 存储构建合适的数据结构 在我的网络应用程序中 一张照片可以是一个或多个相册的一部分 我有使用 MySQL 的经验 但几乎没有使用键值存储的经验 使用 MySQL 我将设置 3 个表 如下所示 photos
  • 如何在 selenium Chrome 功能中设置默认下载目录?

    请查找以下具有 chrome 功能的代码 事实上浏览器并没有将文件下载到指定的路径 private static DesiredCapabilities getChromeCapabilities throws Exception Stri
  • 样式的顺序重要吗?

    下面是我的标记 当我将鼠标移到超链接上时 它们会带有下划线并变成红色 但如果我交换最后两条规则的顺序 超链接仍然会带有下划线 但它们的颜色会变为黑色而不是红色 这是设计使然吗 如果是这样 规则是如何应用的 谢谢 康斯坦丁
  • Android LocationRequest:请求过期时获取回调

    我想知道如何捕获事件或当我的 LocationRequest 过期时发生什么 这是代码 然后我称之为 mLocationRequest LocationRequest create mLocationRequest setPriority
  • ECLIPSE RCP 项目无法成功导出

    当我使用 product 文件的概述选项卡上的导出向导导出 Eclipse 产品时遇到错误 错误信息如下 但当我从 Eclipse 内部将其作为 Eclipse 应用程序运行时 它工作得很好 任何人都可以对此提供一些想法 C workSpa
  • @Page { size:landscape} 过时了吗?

    CSS 规则 page size landscape 应该强制浏览器以横向模式打印页面 stackoverflow 上的许多问题 许多其他编程网站以及参考著作 例如 O Reilly 的 HTML XTHML 权威指南 第五版 中都提到了这
  • 如何计算dropzone中上传的所有文件大小?

    我想计算在 dropzone 中上传的所有选定文件的总大小 例如 如果我选择了 5 个文件 每个文件大小为 2mb 那么 它应该返回 10mb 总大小 我想限制所有文件的总大小是否大于限制 谁能帮我解决这个问题 我真的很困难 您可能需要此功
  • AWS Step Functions 中的直通输入到输出

    我怎样才能将输入传递给TaskAWS Step Functions 中的状态到输出 读完后输入和输出处理 http docs aws amazon com step functions latest dg amazon states lan
  • ORA 00904 错误:无效的标识符

    我已经在虚拟 XP 中安装了 Oracle 10g 并使用以下命令创建了一个表 create table reg1 fname varchar2 30 lname varchar2 30 addr varchar2 30 mail varc
  • selenium 2 Web 驱动程序另存为对话框

    使用 selenium 2 和 webdriver 我的一个脚本需要以 pdf 或 csv 格式保存报告 两者都只会弹出一个另存为对话框 我不知道如何与之互动 我现在正在尝试使用 Firefox 但希望它可以在所有浏览器中运行 我读过 20
  • 防止 ffmpeg 在降低视频分辨率的同时改变颜色强度

    我有一个用例 我需要缩小规模716x1280mp4 视频到358x640 原件的一半 我使用的命令是 ffmpeg i input mp4 vf scale 640 640 force original aspect ratio decre
  • 使用 html 表收集提交表单中的各种数据

    我有一个 jsp 页面 其中包含一个表 分页并带有顺序列 一个搜索字段和其他基于复选框的过滤器 这样 当我单击按钮时 它会采用表格的分页 表格的顺序 搜索字段中的值以及最终的其他参数 复选框 来执行查询 目前 该表具有分页和使用标签库排序的
  • 一对多关系未显示在对象放大架构定义中

    我刚开始将 amplify 与 GraphQL 结合使用 我正在设置数据库模式并在运行放大推送后自动生成函数 我想要实现但不知道如何实现的目标 我希望能够在 getUser 返回的对象中获取用户的所有连接信息 一对一和一对多关系 我希望仍然
  • Windows Phone 8 开始屏幕磁贴大小和边距

    我想知道是否有人知道新的 Windows Phone 8 Startscreen 480x800 的确切尺寸 即边距 顶部 左侧和右侧 图块之间 以及所有三种不同图块尺寸的边缘长度 For 720p 1280 720 and WXGA 12
  • 可以解析Delphi XMLDoc格式并构建在线帮助的工具

    API 文档的 XMLDoc 工具解释如下 http edn embarcadero com article 32770 http edn embarcadero com article 32770 是否有任何免费或商业工具可用于创建基于
  • getActivity() 在我的 ActivityInstrumentationTestCase2 类中返回 null

    我希望我的应用程序使用 ActivityInstrumentationTestCase2 在代码中执行以下测试 问题是 getActivity 方法返回 null 这会导致包含 getActivity 的行正下方的行出现 NullPoint