首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从单元测试中调用getSharedPreferences()时出现UnsupportedOperationException

从单元测试中调用getSharedPreferences()时出现UnsupportedOperationException是因为在单元测试环境中无法直接调用Android的SharedPreferences类。SharedPreferences是Android提供的一种轻量级的数据存储方式,用于存储简单的键值对数据。

在单元测试中,我们需要模拟SharedPreferences的行为,以便进行测试。为了解决这个问题,可以使用Android的测试框架和工具来模拟SharedPreferences的行为,例如使用Mockito框架来创建一个模拟的SharedPreferences对象。

以下是解决该问题的步骤:

  1. 引入Mockito库:在项目的build.gradle文件中添加依赖项:testImplementation 'org.mockito:mockito-core:x.x.x'其中,x.x.x是Mockito库的版本号。
  2. 创建模拟的SharedPreferences对象:在单元测试中,使用Mockito框架的mock()方法创建一个模拟的SharedPreferences对象,并设置期望的行为。例如:SharedPreferences sharedPreferences = mock(SharedPreferences.class); when(sharedPreferences.getString(eq("key"), anyString())).thenReturn("value");这里使用when()方法来设置当调用getString()方法时,返回预期的值。
  3. 使用模拟的SharedPreferences对象进行测试:在单元测试中,将模拟的SharedPreferences对象传递给需要测试的类,并进行相应的测试操作。例如:MyClass myClass = new MyClass(sharedPreferences); String result = myClass.getData(); assertEquals("value", result);这里假设MyClass是需要测试的类,它依赖于SharedPreferences对象。通过将模拟的SharedPreferences对象传递给MyClass的构造函数,可以在测试中模拟SharedPreferences的行为,并验证MyClass的功能是否正常。

通过以上步骤,我们可以在单元测试中模拟SharedPreferences的行为,解决调用getSharedPreferences()时出现UnsupportedOperationException的问题。

推荐的腾讯云相关产品:腾讯云提供了丰富的云计算产品和服务,包括云服务器、云数据库、云存储等。具体可以参考腾讯云的官方文档和产品介绍页面。

腾讯云产品介绍链接地址:https://cloud.tencent.com/product

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android开发4个常用的工具类【Toast、SharedPreferences、网络及屏幕操作】

本文实例讲述了Android开发4个常用的工具类。...*/ public class ToastUtil { private ToastUtil() { /* cannot be instantiated */ throw new UnsupportedOperationException...保存在手机里面的文件名 */ public static final String FILE_NAME = "share_data"; /** * 保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法...object.toString()); } SharedPreferencesCompat.apply(editor); } /** * 得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值...Note TODO */ public class NetUtils { private NetUtils() { /* cannot be instantiated */ throw new UnsupportedOperationException

75620

Android快速开发系列 10个常用工具类实例代码详解

保存在手机里面的文件名 */ public static final String FILE_NAME = "share_data"; /** * 保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法...public static void put(Context context, String key, Object object) { SharedPreferences sp = context.getSharedPreferences...object.toString()); } SharedPreferencesCompat.apply(editor); } /** * 得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值...getAll(Context context) { SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE...SharedPreferencesCompat.apply进行了替代,目的是尽可能的使用apply代替commit首先说下为什么,因为commit方法是同步的,并且我们很多时候的commit操作都是UI线程

46110

【Java】解决Java报错:UnsupportedOperationException

单元测试 6.1 MainTest.java 结语 引言 在Java编程UnsupportedOperationException 是一种常见的运行时异常,通常发生在尝试对不支持操作的对象调用某些方法...[] args) { List customList = new CustomList(); customList.add("A"); // 尝试调用未实现的方法...解决方案 解决UnsupportedOperationException的关键在于确保对象支持所执行的操作,并在必要提供合适的实现。 3.1 使用支持操作的集合 确保使用的集合支持所需的操作。...[] args) { List customList = new CustomList(); customList.add("A"); // 正确调用已实现的方法...单元测试 编写单元测试来验证集合操作的正确性,确保代码在各种边界条件下都能正确运行。

36110

源码分析多进程下的SharedPreferences

getSharedPreferences方法来获取SharedPreferences对象,在ContextgetSharedPreferences方法是一个抽象方法,没有具体实现 public abstract...File对象,不存在则创建一个并放入ArrayMap,然后调用getSharedPreferences的重载方法getSharedPreferences(file, mode),我们看一下这个方法的源码...对象优先从缓存获取,再次创建才会重新磁盘再次读取文件。...,int mode)方法的时候,会通过该方法参数name(文件名)ArrayMap获取对应的File(无的话则创建ArrayMap或在ArrayMap添加该键值对),然后调用重载方法getSharePreferences...mMap(Map集合),当调用getString等方法,则是直接mMap集合取出值进行返回。

39810

APP启动引导页的制作,用ViewPager实现翻页动画

Genymotion,血的教训 ---- 1.SharedPreferences##### SharedPreferences是一种Android提供的,简易的用于在手机上永久化保存数据的类,这个轻量级的类在保存数据,...Context 类getSharedPreferences()方法 public abstract SharedPreferences getSharedPreferences (String name...) ,getDefaultSharedPreferencesMode()); } 归根到底,3个方法都是调用的Context 类getSharedPreferences()方法,此方法传入的两个参数...editor.putBoolean("isRead", true); //放入数据,提供各类put方法对应不同类型的数据,按键值对进行输入 editor.commit(); //调用调用...此处position会依次出现0,1,2,3等整型数字。 基本上就这样~看看效果 ? -完-

1.9K10

手把手教你实战TDD

可以说,执行慢是单元测试和TDD推不起来的非常大的原因。 结论:单元测试必须屏蔽基础设施(外部服务、中间件)的调用,且单元测试仅用于验证业务逻辑是否按预期执行。...在项目工期紧迫的情况下,更应该坚持写单元测试,这不会影响项目进度。相反,它可以帮助开发者提高代码的质量和可靠性,减少错误和缺陷的出现,从而避免了后期因为错误导致的额外成本和延误。...3.4 误区四 代码完成后再补单元测试 任何时候写单元测试都是值得鼓励的,都能使开发者单元测试受益。...异常 throw new UnsupportedOperationException(); } } 运行单元测试,此时有3个测试用例,其中有1个出错: 图6.此时3个测试用例只有一个出错...重点关注的一层,为了确保用例执行的效率以及屏蔽基础设施调用,Service层所有对基础设施的调用都应该Mock掉。

31821

关于单元测试,其实你也可以这样来写

大家好,我是测试君,今天为大家一款强大的单元测试框架PowerMock。 关于PowerMock 在TDD领域Mock框架有很多,比如EasyMock,JMock,Mockito。...可能有些同学会好奇了,为什么要重点把powermock拿出来呢,因为powermock可以解决前面三种框架不能解决的问题,而且powermock也是是单元测试中极其强大的测试框架。...PowerMock特点 主要围绕着Junit、TestNg测试框架开展进行 对所依赖的Jar包非常的苛刻,出现jar包的冲突或者不一致就不能使用 PowerMock也是一种Mock,主要是解决其他Mock...你会好奇这块为啥我要抛出UnsupportedOperationException异常呢?...3、总结 我们可以这样理解mock就是创建一个假的该对象,然后需要你告诉这个对象调用某个方法的时候返回某个你指定的值即可。

62610

Kotlin入门(25)共享参数模板

在使用共享参数之前,要先调用getSharedPreferences方法声明文件名与操作模式,示例代码如下:     SharedPreferences sps = getSharedPreferences...Preference的委托属性,委托属性一旦声明,则它的初始值便是共享参数读取的数值;后续代码若给委托属性赋值,则立即触发写入动作,把该属性的最新值保存到共享参数。...,故而它相当于Java里面的Object; 3、*星号表示一个不确定的类型,同样也是在外部调用时才能确定,这点跟T比较像,但T出现在模板类的定义,而*与模板类无关,它出现在单个函数定义的参数列表,...所以很多银行都推出了“委托代扣”的业务,只要用户跟银行签约并指定委托扣费的电力账户,那么在每个月指定时间,银行会自动用户银行卡扣费并缴纳给指定的电力账户,如此省却了用户的人工操作。...现实生活的委托扣费场景,对应到共享参数这里,开发者的人工操作指的是手工编码SharedPreferences类读取数据和保存数据,而自动操作指的是约定代理的属性自动通过模板类Preference<T

86510

SharedPreferences 详解(多进程,存取数组解决方案)

而apply只是原子的提交到内容,后面有调用apply的函数的将会直接覆盖前面的内存数据,这样从一定程度上提高了很多效率。 apply方法不会提示任何失败的提示。...综合上述,由于在一个进程,sharedPreference是单实例,一般不会出现并发冲突,如果对提交的结果不关心的话,建议使用apply,当然需要确保提交成功且有后续操作的话,还是需要用commit的...对api的理解 1. commit介绍:public abstract boolean commit ()        修改你的preferences,Editor到SharePreferences...SharedPreferences,但是开始异步提交到磁盘。...", getMode()); } 下面是getSharedPreferences方法的定义和解释: public abstract SharedPreferences getSharedPreferences

1.5K90

SharedPreferences 源码解析及应用(多进程解决方案)

(String name, int mode) { return mBase.getSharedPreferences(name, mode); } 跟到这里发现调用了 mBase.getSharedPreferences...ActivityThread 创建了 ContextImpl 对象,并赋值给 mBase,所以 mBase.getSharedPreferences() 就是 ContextImpl.getSharedPreferences...() 的封装,最终实现都在 ContextImpl.getSharedPreferences() 。...startLoadFromDisk(),在 startLoadFromDisk() 开启了一个线程 调用 loadFromDisk() 磁盘文件读取数据,它做了如下几件事: 如果有备份文件,则直接使用备份文件...awaitLoadedLocked(),如果 mLoaded = false,即没有读取完配置文件,会卡在这里,直到 SharedPreferencesImpl.loadFromDisk() 读取完毕后调用

1.5K10

细数 SharedPreferences 的那些槽点 !

mode 默认为 MODE_PRIVATE,其实现在也只用这种模式了,后面的源码解析也会提到。最后都会调用到 ContextImpl 的 getSharedPreferences() 方法。...最后会调用另一个重载的 getSharedPreferences() 方法,参数是 File 。...如果我们在使用过程调用 getSharedPreferences() 之后,直接调用 getXXX()方法来获取数据,恰好 sp 文件数据量又比较大,读取过程比较耗时,getXXX() 方法就会被阻塞...v : defValue; } } 一旦 sp 文件加载完成,所有获取数据的操作都是内存读取的。...所有的 putXXX() 方法都只是改变了 mModified 集合,当调用 commit() 或者 apply() 才会去修改 sp 文件。下面分别看一下这两个方法。

34930

锦囊篇|一文摸懂SharedPreferences和MMKV(一)

w=2084&h=788&f=png&s=121041] 使用方法 SharedPreferences // 1:获得SharedPreferences,这是直接包含在Context的方式,直接调用即可...显然这就要看一下SharedPreferences的实现类具体是如何进行操作的了,他的构造函数看起,慢慢进入深度调用。...mMap: 存储文件拉取的数据。 mModified: 存储希望修改值的数据。 apply()/commit(): 猜测最后就是上述两者数据的合并,再进行数据提交。...其实他有点类似于程序计数器,在阻塞数量大于线程数,会阻塞运行,而超出数量就会出现并发状况。 [172f3dfadc67b861?...当然这是其一,自然还有另外一个判断就是关于版本方面,如果小于HONEYCOMB同样可以进入这个方案,但是需要注意getSharedPreferences()是只有获取才会出现的,而SharedPreferences

1.1K10

1-SII--SharedPreferences完美封装

"); SpUtils spFloat = new SpUtils(this); spFloat.put("Float", 3.14f); 2.读取已设置的值:第二参数是key不存在,...读取 * * @param key 存储节点名称 * @param defValue 默认值 * @return 读取boolean标示sp...remove(String key) { if (sp == null) { sp = mContext.getSharedPreferences("config...而apply只是原子的提交到内容,后面有调用apply的函数的将会直接覆盖前面的内存数据, 这样从一定程度上提高了很多效率。 3.apply方法不会提示任何失败的提示。...综合上述,由于在一个进程,sharedPreference是单实例,一般不会出现并发冲突, 如果对提交的结果不关心的话,建议使用apply,当然需要确保提交成功且有后续操作的话,还是需要用commit

44340
领券