当我的活动依赖于通过 Intent 传递的额外内容时,如何编写 Android JUnit 测试?

2024-02-28

我正在为一个类编写一个 android Junit 测试,该类依赖于通过 Intent 传递给它的额外内容。我能够让该类正常工作,但我仍然想知道如何为这样的类编写单元测试,因为测试仍然失败。

public class AddClassEvent extends Activity{
 private String eventType;

  @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  Bundle extras = getIntent().getExtras();
  final String cNo = extras.getString("CourseNum");

  // create a model instance
  final StudentDBModel model = new StudentDBModel(this);

  setContentView(R.layout.add_class_event);
 .....
 .....
         }
     }

测试课看起来像...

public class AddClassEventTest extends ActivityInstrumentationTestCase2<AddClassEvent>{
 private StudentDBModel model = null;
 private RenamingDelegatingContext context = null;

 public AddClassEventTest() {
  super("com.UI", AddClassEvent.class);
 }

 /**
  * This method is called before each test.
  */
 @Override
 public void setUp() {
  context = new RenamingDelegatingContext(getActivity(), "test_");
  model = new StudentDBModel(context);
 }

 /*
  * This function will test addNewClassEvent() from StudentDBModel
  */
 public void testAddNewClassEvent(){

  ContentValues courseValues = new ContentValues();
  courseValues.put("CourseId", "60-415");
  courseValues.put("CourseName", "Advanced Database Design");
  courseValues.put("Section", "1");
  courseValues.put("Location", "Erie");
  courseValues.put("Credit", "3");
  courseValues.put("ProfEmail", "[email protected] /cdn-cgi/l/email-protection");
  courseValues.put("Website", "cs.uwindsor.ca");

  model.addNewCourses(courseValues);

  int numEventsBefore = model.getNumClassEvents();

  ContentValues values = new ContentValues();

  values.put("EventName", "Assignment 1");
  values.put("CourseId", "60-415");
  values.put("EventType", "Assignment");
  values.put("EventWeight", "8");
  values.put("DueDate", "10/20/2010");

  model.addNewClassEvent(values);

  int numEventsAfter = model.getNumClassEvents();

  assertEquals(numEventsBefore + 1, numEventsAfter);
 }
}

问题是,我传递给类 AddClassEvent 的额外内容是我的数据库的 PK,它是在另一个类中创建的,并通过 Intent 传递给 AddClassEvent。每当我运行测试时,我都会收到 NULL 指针异常:

final String cNo = extras.getString("CourseNum");

如何从 Junit 测试中的额外内容创建信息?有没有办法让这个测试发挥作用?我进行了广泛的搜索,但找不到答案。是否有某种方法可以在 Junit 测试中错误地创建额外内容,以便它认为它是由其他类创建的?如果是这样,有人可以告诉我怎么做吗?


好的,我尝试听取您的建议,并将我的设置功能更改为:

@Override
public void setUp() {
    context = new RenamingDelegatingContext(getActivity(), "test_");
    model = new StudentDBModel(context);
    Intent addEvent = new Intent();
    addEvent.setClassName("com.UI", "com.UI.AddClassEvent");
    addEvent.putExtra("CourseNum", "60-415");
    setActivityIntent(addEvent);
    getActivity();
}

但我仍然收到 NULL 指针异常。我的语法错误吗?有什么建议么?


你继承的类,ActivityInstrumentationTestCase2,允许你嘲笑Intents。来自文档 http://developer.android.com/reference/android/test/ActivityInstrumentationTestCase2.html#setActivityIntent%28android.content.Intent%29:

您可以将自定义 Intent 注入到您的 Activity 中(请参阅 setActivityIntent(Intent))。

的文档设置活动意图()进一步明确:

在第一次调用之前调用此方法 到 getActivity() 注入一个 自定义 Intent 到 Activity 中 正在测试中。

如果不调用此方法,则默认 将提供意图。如果你打电话 在您的活动完成后 开始了,不会有任何影响。

所以你应该能够在你的内部调用这个方法setUp()在您致电之前getActivity()。您可以像您提到的那样将模拟的 Intent 传递到 setActivityIntent 中 - 只需构建一个带有您希望 Activity 看到的额外内容的假 Intent 即可。

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

当我的活动依赖于通过 Intent 传递的额外内容时,如何编写 Android JUnit 测试? 的相关文章

  • 在 Android 10/Q 上运行的 Android ACTIVITY_RECOGNITION 权限 SDK 28 (SDK 29)

    我的 Android 应用程序以 SDK 28 为目标 并连接到 Google Fit 以上传数据并读取其他一些数据 该应用程序使用 HistoryAPI 读取 com google step count delta 数据 本文档声称 如果
  • 从SQLite列中获取所有数字字符串并进行总和计算

    我是 Android 和 SQLite 的新手 我在 SQLite 中有一个只有数字的 AMOUNT 列 我可以在 ListView 中显示它 但我无法找到任何我理解的方法来将它们全部添加并显示在 TextView 中 这是数据库助手 im
  • 您的手机中未安装应用程序

    我在模拟器中运行该应用程序 它成功运行 并且应用程序的图标显示在模拟器菜单中 但是当我尝试从模拟器菜单再次运行该应用程序时 它不允许我从中运行并显示 Toast 您的手机中未安装应用程序 在图像中 红色圆形是我的应用程序图标 如果您有您的M
  • onScale 和 Canvas - 缩放图像后如何调整原点?

    我有一个非常简单的测试应用程序 带有自定义组件MyView java https github com afarber android newbie blob master TestScroll src de afarber testscr
  • 将网页保存到android中的webview缓存中

    我正在创建一个应用程序 它将从互联网下载一些网页 并在用户单击按钮时将它们保存到缓存 并在没有互联网可用时加载它们 当我运行代码时 出现空指针异常 我已在清单文件中添加了所有必要的权限 public class MainActivity e
  • Android 无法查找支持版本 27.0.0 的窗口

    更新后supportVersion to 27 0 0仅在 Android 5 0 2 上 应用程序会因以下堆栈跟踪而崩溃 W WindowManager Failed looking up window java lang Illegal
  • 小米设备正在停止前台服务

    我们有一个几乎永远运行的应用程序前台服务 同时使用系统托盘上的通知 这是正常的初始化 该应用程序仅依赖于此服务 在我们测试的每台设备上 即使任务被删除 服务也会继续运行 但在小米设备上 从最近的任务滑动后 它突然停止 然后再次启动 具体取决
  • 实施材质主题时遇到问题

    我在用this http antonioleiva com material design everywhere 作为在 Android 5 0 之前的设备上向现有应用程序实施 Material 主题的教程 我的问题是我得到了Null Po
  • 删除对象时删除嵌套字段中的索引

    我仍在使用 Firebase 这次我有一个与删除对象相关的问题 我有如下结构 users UsErId1 name Jack email email protected cdn cgi l email protection UsErId2
  • Android 设备选择器在目标列中显示红色 X

    我最近构建了一个 Android 应用程序 minSdkVersion 为 7 targetSdkVersion 为 10 我现在正在使应用程序兼容平板电脑并添加操作栏 因此 我将 targetSdkVersion 更新为 15 并在项目属
  • 当 Android 上的脸部靠近屏幕时,以编程方式关闭屏幕

    我的应用程序是一个拨号器 当用户将手机靠近头部时 我需要关闭屏幕并防止单击控件 就像本机 Android 拨号器行为一样 我需要什么 API 级别以及如何以正确的方式做到这一点 我通过反汇编一个非常著名的 VoIP 应用程序找到了解决方案
  • 如何在应用程序中创建会话对象

    在我的应用程序中 我想创建一个用于登录和注销的会话 我不知道如何使用会话 任何人都可以通过提供一些示例来帮助我 我认为会话对象应该是在应用程序开始运行时声明和初始化的静态对象 我遇到了这个问题 并决定将我的会话对象放入 utils 类中 该
  • 直接在应用程序中评价 Google Play 应用程序 [重复]

    这个问题在这里已经有答案了 我需要在我的 Android 应用程序中设置费率选项 我找到了这个link http www androidsnippets com prompt engaged users to rate your app i
  • Gradle创建多项目Jar

    因此 从 Gradle 和 Android Studio 诞生之初起 我就一直在使用它们 然而 我发现自己用头撞墙的次数有时远远超过了它的价值 我花了一天半的时间试图解决我目前的困境 在我工作的地方 我们使用很多共享库项目 这意味着与 Gr
  • SQLiteConstraintException:错误代码19:约束失败——Android错误

    我已经看到了一些与此相关的其他问题 但没有一个答案似乎真正适用于我的代码 当我尝试插入数据库时 出现 SQLiteConstraintException 错误代码 19 约束失败 错误 这是插入操作的代码 db insert 现在返回 1
  • Android wifi的信号强度[重复]

    这个问题在这里已经有答案了 可能的重复 Android 如何监控WiFi信号强度 https stackoverflow com questions 1206891 android how to monitor wifi signal st
  • 如何修补更新 Android Studio (0.80 -> 0.81)?

    我安装了 Android Studio Beta v0 8 0 并下载了 v0 8 1 因为 IDE 不会自动下载 v0 80 并使用新版本修补 Android Studio 的预览系列自动做到了这一点 从他们的网页 http tools
  • Android onclicklistener 在第一次点击时不起作用

    我有一个带有默认文本的 EditText 现在 当用户单击该 EditText 时 默认文本应该更改为某些内容 我所拥有的是 我单击 EditText 光标出现在默认文本之后 没有任何反应 当我再次单击时 onClickListener 就
  • 如何使用 javascript 迭代文件系统目录和文件?

    我正在使用 Javascript 编写一个应用程序 该应用程序将与 Phonegap 一起使用来制作 Android 应用程序 我正在使用 Phonegap File API 来读取目录和文件 相关代码如下所示 document addEv
  • 在edittext android中插入imageview

    我想将 imageview 放在 edittext 中 可能吗 我检查了 evernote 应用程序 它能够将照片放在编辑文本部分 我想让我的应用程序完全相同 我如何才能将从图库中选择的图像视图放入编辑文本中 我首先尝试将 imagevie

随机推荐

  • 如何使用 jQuery 清空输入字段

    我在移动应用程序中 使用输入字段来命令用户提交号码 当我返回并返回到输入字段显示输入字段中显示的最新数字输入的页面时 有没有办法在每次加载页面时清除该字段 shares keyup function payment 0 calcTotal
  • 如何在 Scala 中减去列表中的两个连续元素?

    我想用 Scala 中的数字减去列表中的两个连续元素 例如 我有这个清单 val sortedList List 4 5 6 我想要一个像这样的输出列表diffList 1 1 where 5 4 1 and 6 5 1 我尝试了以下代码
  • 无法使用 [self theMethod:] 调用类方法

    我正在尝试在 Objective C 中编写一个类方法 当我声明该方法时 该项目构建得很好 但每当我尝试调用该方法时 构建都会失败 这是我的代码 头文件 import
  • 使浅层 GIT 存储库变得不那么浅

    我为指定标签创建浅克隆 git clone branch v0 1 3 depth 1 file c usr sites smc 此后 克隆的存储库中仅包含标签 v0 1 3 和相关文件 它没有该标签之前或之后的所有更改的历史记录 据我所知
  • 在非常大的文件中快速搜索字符串

    在包含字符串的文件中搜索行的最快方法是什么 我有一个包含要搜索的字符串的文件 这个小文件 smallF 包含大约 50 000 行 如下所示 搜索字符串1字符串搜索2字符串搜索3 我必须在一个更大的文件中搜索所有这些字符串 大约1亿行 如果
  • 实体ORM设计

    我有四个实体 一个大猩猩 一个健康检查 发射器和一个微芯片 我有一个关于将这些实体连接在一起的问题 大猩猩每年进行 3 4 次健康检查 因此它们是 OneToMany 每只大猩猩normally在其生命过程中拥有 1 个微芯片 在健康检查期
  • Android Studio 2.3 中的 Gradle 缩进问题

    每次我在 AS 2 3 中创建一个新的 Activity 时 它都会弄乱 build gradle 缩进 从而导致这样的错误 错误 无法获取 org gradle api internal artifacts dsl dependency
  • 测试数字是否在循环区间内

    假设我们有一个数字圈 范围从 180 到 180 看起来像这样 180 180 90 90 0 圆的一部分始终沿顺时针方向扫过 如何判断一个数字是在扫描区间之内还是之外 在以下示例 I O 中 前两个数字表示间隔 第三个数字是正在检查的数字
  • 使用selenium webdriver java 4.0v捕获网络流量

    我想捕获 Chromedriver 窗口中生成的网络流量 我发现可以使用 selenium 4 0 DevTools 实用程序来完成此操作 但我找不到如何操作或良好的文档 https www selenium dev selenium do
  • hive hadoop 上可用的数据可视化工具

    请推荐一些可以在 Hive Hadoop 上运行的可视化工具 唯一的事情是 它应该接受Hive 这取决于您想要的数据分析和可视化类型 如果您打算使用专有工具 那么Tableau http www tableausoftware com so
  • pyspark没有模块名称错误

    这是我正在遵循的教程中的确切代码 我的同学使用相同的代码没有收到此错误 ImportError Traceback most recent call last
  • 当没有传递参数时如何读取标准输入?

    当我想在没有传递参数 文件 的情况下使用标准输入时 脚本不起作用 有什么方法可以在这段代码中使用标准输入而不是文件吗 我试过这个 if n 1 check if argument exists then 1 stdin if not use
  • 确定函数是否是异步信号安全的(可以在信号处理程序内部调用)

    我的问题是 如果您无权访问函数的实现 是否有办法最终确定函数是否是异步信号安全的 如果没有 有没有办法测试函数是否足够异步信号安全 可以从信号处理程序调用 如果您阅读 signal 或 sigaction 的手册页 您将获得异步信号安全函数
  • 为什么 ContentResolver 看不到其他应用程序添加的文件?

    我将文件添加到Documents MyExcelsFolder通过使用ContentResolver insert然后还将新文件添加到Documents MyExcelsFolder另一个应用程序的文件夹 例如文件管理器 然后我尝试从以下位
  • 平滑地朝目标对象旋转对象

    我想将我的玩家车辆旋转到目标对象方向 侧面 通过下图 我试图以更好的方式解释我的观点 我想将下面的坦克对象旋转到另一个坦克对象 以便它可以指向那个方向 我为此目的编写了这段代码 但它不起作用 IEnumerator DoRotationAt
  • 为什么多行 TextView 中的换行内容会填充父级?

    我将多行文本视图设置为android layout width wrap content 当渲染时 它会占用父级的所有可用宽度 当文本可以容纳在一行中时 wrap content工作正常 但在两行或更多行时 文本视图似乎与父级宽度相匹配 在
  • 在Panorama GUI中找到三个JS坐标?

    我过去玩过一点 ThreeJS 现在正在进行一个新项目 试图在全景中设置热点 我记得使用相机移动车 http davidpaulrosser github io Threejs camera dolly http davidpaulross
  • 为什么我从 Firebase 动态链接 API 收到服务器错误?

    我正在尝试使用 Firebase API 和google api client Ruby gem https github com google google api ruby client 这是我正在使用的代码 配有内联 Gemfile
  • UITextField 中的静态字符前缀

    是否有一种内置方法可以将字符前缀添加到UITextField喜欢下面的截图吗 如果不是 那么实现这一目标的最佳 最直接的方法是什么 我在想background财产也许能够做到这一点 只需添加一个灰色UILabel在上面UITextField
  • 当我的活动依赖于通过 Intent 传递的额外内容时,如何编写 Android JUnit 测试?

    我正在为一个类编写一个 android Junit 测试 该类依赖于通过 Intent 传递给它的额外内容 我能够让该类正常工作 但我仍然想知道如何为这样的类编写单元测试 因为测试仍然失败 public class AddClassEven