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

flutter中mockito上缺少存根错误。尝试在模拟的SharedPreferences上使用setString

flutter中mockito上缺少存根错误是指在使用模拟对象(mock object)进行单元测试时,对于模拟的SharedPreferences对象使用setString方法时出现的错误。

在Flutter中,SharedPreferences是用于存储和获取应用程序的持久化数据的类。而在单元测试中,为了避免对真实的SharedPreferences进行操作,我们通常会使用模拟对象来替代。

而mockito是一个在Dart语言中用于创建和管理模拟对象的库。它可以帮助我们在单元测试中模拟各种对象的行为。

当在模拟的SharedPreferences对象上使用setString方法时,如果出现缺少存根错误,通常是因为我们没有为该方法设置模拟行为。

解决这个问题的方法是使用mockito的when方法来为setString方法设置模拟行为。具体步骤如下:

  1. 导入mockito库:
代码语言:txt
复制
import 'package:mockito/mockito.dart';
  1. 创建SharedPreferences的模拟对象:
代码语言:txt
复制
SharedPreferences sharedPreferencesMock = MockSharedPreferences();
  1. 设置setString方法的模拟行为:
代码语言:txt
复制
when(sharedPreferencesMock.setString(any, any)).thenAnswer((_) => Future.value(true));

上述代码中的any表示任意类型的参数,thenAnswer方法用于设置模拟行为,这里我们简单地返回一个Future值。

  1. 在测试中使用模拟的SharedPreferences对象:
代码语言:txt
复制
// 假设有一个需要测试的类,其中使用了SharedPreferences
MyClass myClass = MyClass(sharedPreferences: sharedPreferencesMock);

// 进行测试
// ...

// 验证setString方法是否被调用
verify(sharedPreferencesMock.setString(any, any)).called(1);

通过以上步骤,我们为模拟的SharedPreferences对象设置了setString方法的模拟行为,并在测试中使用了该模拟对象。最后,我们可以使用verify方法来验证setString方法是否被调用。

总结一下,解决flutter中mockito上缺少存根错误的步骤如下:

  1. 导入mockito库;
  2. 创建SharedPreferences的模拟对象;
  3. 使用when方法为setString方法设置模拟行为;
  4. 在测试中使用模拟的SharedPreferences对象;
  5. 验证setString方法是否被调用。

关于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体品牌商,无法给出具体链接。但腾讯云提供了丰富的云计算服务,包括云服务器、云数据库、云存储等,可以根据具体需求选择适合的产品。

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

相关·内容

Flutter】shared_preferences 本地存储 ( 简介 | 安装 shared_preferences 插件 | 使用 shared_preferences 流程 )

一、shared_preferences 本地存储插件简介 ---- shared_preferences 是 Flutter 提供 本地数据存取 插件 ; 不同平台 , 基于不同机制开发 ,...Get 按钮 , 下载插件包到本工程 ; 最后 , Dart 代码中导入如下代码 , 即可使用 shared_preferences ; import 'package:shared_preferences...完成'; }); /// 将数据保存到 SharedPreferences await prefs.setString("name", "小王"); } 数据访问示例... await prefs.setString("name", "小王"); } _getValue() async { /// 先获取 SharedPreferences.../docs/ Flutter 相关问题 : https://flutterchina.club/faq/ ( 入门阶段推荐看一遍 ) GitHub Flutter 开源示例 : https://download.csdn.net

1.1K10

Flutter本地存储

flutter packages get来同步第三方插件 自己Dart文件引入插件即可正常使用了 import ‘package:shared_preferences/shared_preferences.dart...我们使用SharedPreferences.getInstance()方法来实例化SharedPreferences对象,使用setString方法来存储用户输入字符串。...:path_provider/path_provider.dart’; 即可使用Flutter文件存储 path_provider中有三个获取文件路径方法: getTemporaryDirectory...最后,我们来看下FlutterSqlite用法 Sqlite ---- 和SharedPreferences和文件操作操作一样,Flutter内部并没有提供对sqlite支持,但是官方给我们提供了第三方支持库哦...、数据库操作都是命耗时操作,需要异步执行 试一试 ---- 今天我们对SharedPreferences、文件、数据库获取Future对象都是通过async和await获得,那么大家在下面尝试把今天获取

4.8K30

Flutter】简单数据持久化

shared_preferences 是一个第三方插件, Android 中使用 SharedPreferences iOS中使用 NSUserDefaults。...首先将这些设置保存在内存明显无法达到要求,因为退出应用程序内存也会释放,那上传到服务器呢?再次进入时候拉取服务器配置数据,这种方案有两个弊端: 用户无网络情况下失效。...基于以上需求,这些配置需要持久化保存在本地,而 shared_preferences 就是最受欢迎框架之一, 适用于简单数据持久化,复杂且大量数据持久化建议使用 SQLite。...设置清除应用数据。.../tree/master/packages/shared_preferences/shared_preferences ❞ 添加依赖 项目的 pubspec.yaml 文件添加依赖: dependencies

83310

暴力突破 Flutter 自动化测试

二、单元测试 ---- 单元测试是指对软件最小可测试单元进行验证方式,使用单元测试可以验证单个函数、方法或类行为。我们来看看 Flutter 项目的工程目录: ?...,示例如下: //flutter test 文件路径flutter test test/unit_test.dart//使用 flutter run 文件路径 方式来运行到真机或模拟测试也是可以...2.2 使用 mockito 模拟外部依赖 进行单元测试时我们可能还需要从外部依赖(比如web服务)获取需要测试数据,我们先来看一个示例, lib 创建一个要测试类:...,很难覆盖所有可能成功或失败用例,因此更好办法是测试用例模拟这些”外部依赖“,让其可以返回特定内容。...接下来我们来看看使用 mockito 模拟外部依赖步骤: 2.2.1 添加依赖 pubspec.yaml 文件 dev_dependencies 添加 mockito 包: dependencies

2K31

对于 Flutter 快速开发框架思考

网络请求管理:这个是标配了,对外窗口,一般来讲做选型需要注意可以支持请求拦截,支持响应拦截,以及错误处理机制,方便做重试等等。...UI组件库:Flutter,可能不太需要考虑这个,因为Flutter本身自己就是已这个为利刃行家了,不过现在有些企业发布了自己UI库,觉得可以跟一下。...测试和调试:flutter_test, mockito 库名: flutter_test (内置), mockito 描述: flutter_test提供了丰富测试功能,mockito用于模拟依赖。...选择理由: flutter_test是Flutter官方测试库,mockito可以有效地模拟类和测试行为。 9. 日志系统:logger 库名: logger 描述: 提供简单而美观日志输出。...test/: 测试目录包含各层测试代码,使用flutter_test和mockito来编写测试。

28230

Flutter 构建完整应用手册-持久化

建立 我们开始之前,我们需要将shared_preferences插件添加到我们pubspec.yaml文件: dependencies: flutter: sdk: flutter...iOS,这对应于NSTemporaryDirectory()返回值。 Android,这是getCacheDir()返回值。 文档目录:应用程序目录,用于存储只有它可以访问文件。...iOS,这对应于NSDocumentDirectory。 Android,这是AppData目录。 我们例子,我们希望将信息存储文档目录!...MethodChannel是Flutter用来与主机平台进行通信类。 我们测试,我们无法与设备文件系统进行交互。 我们需要与我们测试环境文件系统进行交互!...为了模拟方法调用,我们可以我们测试文件中提供一个setupAll函数。 该功能将在测试执行之前运行。

1.5K20

即使不懂单元测试,会用这个工具也够了~

Mockito学习 Mockito 是一个强大用于 Java 开发模拟测试框架, 通过 Mockito 我们可以创建和配置 Mock 对象, 进而简化有外部依赖测试.可以不进行外部依赖,快速进行...Mock 模拟 mock测试就是测试过程,对于某些不容易构造或者不容易获取对象,用一个虚拟对象来创建以便测试测试方法。 Mockito好处 无手写 : 无需自己编写模拟对象。...返回值支持 : 支持返回值 异常支持 : 支持例外 订单检查支持 : 支持检查方法调用顺序 注释支持 : 支持使用注释创建模拟 Mockito集成 引入依赖 ...它还会检测测试可用使用存根, 并使用@Mock注释对模拟进行初始化。 @InjectMocks 它标记应在其执行注入字段或参数。 @Captor 它允许创建字段级参数捕获器。...它与Mockitoverify()方法一起使用, 以获取调用方法时传递值。 @Spy 允许创建部分模拟对象。换句话说, 它允许将现场实例快速包装在测试对象

1.6K10

干货 | Trip.com Flutter代码质量探索

使用testWidget模拟Widget进行测试 testWidget给我们提供了Flutter测试环境来Mock插件、模拟Widget生命周期、多种UI操作等功能,这在某些对话框、流程较长功能以及Widget...不支持反射 FlutterMock上有很大局限性。插件Mock使用是系统提供方法,Mockito只支持静态代理。所以一些需要Mock场景或者结果校验场景需要做一些额外操作来达到目的。...这里我们摘取了Mockito Wiki一些建议,所以项目中尽量会避免使用Mockito来进行Mock,但不能否认是,某些场景下Mockito会很大降低单元测试编写复杂程度。...下面整理了部分Flutter Mockito使用方式,具体使用可在项目Git仓库查看。...ViewModel单元测试覆盖率也已经高于90%,版本迭代过程,也通过单元测试发现了几个错误。 以上总结了Trip.comFlutter空安全、静态代码扫描、单元测试一些探索。

2K30

蹭个热门:Flutter Plugin数据传递通信实例梳理

Flutter向native发送通信(分析实例: SharedPreferences) Flutter通过Dart与Native发送数据通信请求是通过MethodChannel 调用invokeMethod...定义是Plugin,因此iOS需要遵循Plugin协议``` FlutterPlugin ``` Android实现```MethodCallHandler``` ,通信过程是根据Dart设置ChannelName...来区分对应Plugin 对于跨平台来说流程是统一,我们通过iOS来说通信流程,然后在此基础稍微梳理一下Android流程 通信基本流程 1....匹配 系统注册方法需要将通信Channel与regster所携带来messager进行匹配绑定 FlutterMethodChannel *channel = [FlutterMethodChannel...对于通信方法区分是采用字符串匹配方式来达到平台兼容 2. arguments携带flutter传递给native数据 3.

91430

2018年不能错过 14 个 Java 库!

RxJava一个常见用例是在后台线程运行一些计算,比如网络请求,并在UI线程显示结果(或错误): ? MBassador MBassador是一种轻量级,高性能事件总线,实现发布订阅模式。...JUnitParams 与标准JUnit主要区别: 更明确 - params是测试方法参数,而不是类字段 更少代码 - 你不需要一个构造函数来设置参数 您可以一个类混合使用非参数方法参数...(JUnitParametrised,它只是连续参数数量): ?...WireMock 模拟HTTP服务工具: HTTP响应stubbing存根,匹配HTTPURL、头部和正文内容 请求验证 单元测试运行,作为独立进程或作为WAR应用程序运行 可通过流畅Java...API,JSON文件和通过HTTPJSON进行配置 记录/回放存根 故障注入 每次请求条件代理 浏览器代理请求检查和替换 状态行为模拟 可配置响应延迟 ?

1.6K10

单元测试框架spock和Mockito应用

Mockito是一个模拟测试框架,可以让你用优雅,简洁接口写出漂亮单元测试。Mockito可以让单元测试易于可读,产生简洁校验错误。TDD测试驱动开发要求我们先写单元测试,再写实现代码。...写单元测试过程,由于各种依赖关系导致阻碍,我们必需用到Mockito类似的框架来完成资源、对象模拟。..."() { given:"创建一个存根list,添加一些元素" List mockedList = mock(List.class); mockedList.add...,Mockito基础功能在spock应用还是非常流畅,但是一些高级语法还是无法使用,如果在实际项目中使用请多调研两者差别,大概率还是要混合编程。...参考文章: Maven和Gradle配置单元测试框架Spock Groovy单元测试框架spock基础功能Demo Groovy单元测试框架spock数据驱动Demo ---- 郑重声明:“FunTester

2.2K50

🚀Flutter应用程序加固原理

移动应用开发Flutter已经成为一种非常流行技术选项,可以同时Android和iOS平台上构建高性能、高质量移动应用程序。...代码混淆Flutter应用程序核心代码是用Dart编写,并且构建过程中会被转化为机器码。为了防止反编译和代码泄露,开发者可以使用代码混淆工具对代码进行加密。...安全存储可以使用加密算法对数据进行加密,并将加密后数据存储本地存储或云端,以防止数据泄露和被恶意攻击者获取。...prefs = await SharedPreferences.getInstance(); await prefs.setString("data", ciphertext); // 解密 String...应用程序中使用最新版本框架和库,可以大幅度降低应用程序被攻击风险。总结Flutter应用程序加固原理主要包括代码混淆、资源加密、安全存储、防止动态调试和Hook、漏洞修复等方面。

21610

JAVA实战:如何让单元测试覆盖率达到80%甚至以上

单元测试目的是在于确保软件每个独立模块都被正确地测试,并且没有潜在缺陷或漏洞。单元测试,需要对每个模块进行测试,以确保它们能够按照预期方式工作,并且没有任何错误或漏洞。...同时还需要注意,@Mock注解只是用于创建一个模拟对象,使用这个对象进行测试时,需要手动设定其返回值或行为。@InjectMocks是Mockito框架注解。...Mockito.when()是Mockito框架一个方法,它可以被用于设定模拟对象行为。该方法通常和@Mock或@Spy注解一起使用,用于模拟对象行为并指定返回值或者其他行为。...测试代码,当需要匹配方法参数但不关心具体参数值时,可以使用Mockito.any()方法来匹配参数。...mock模拟Mockito.when( 对象.方法名() ).thenReturn( 自定义结果 ),方法名()参数有的人会使用实际参数,这样会导致模拟是无法找到正确结果。

3K20

MeterSphere单元测试-Mockito-Inline出场

根据集成测试用例补充单元测试用例 之前测试旅程,我们新建了测试计划并将测试用例纳入该计划来执行。以下是上述用例执行之后对添加测试计划一个代码覆盖率。 ?...一般来说,如果是系统测试或者集成测试,我们可以通过尝试创建两个相同名字测试计划来验证这一逻辑。不过就单元测试来说,则可以通过模拟方式来实现。 首先来看一下系统界定存在重复测试计划名称方式。...getTestPlanByName方法,通过查询数据库方式,验证在给定workspace是否存在给定测试计划名称,如果存在则返回查询到测试计划列表。 ?...因此,一个看似只有2-3行代码段,使用Mockito造完测试桩之后,我们发现还有2个静态方法需要处理才能实现最初测试目的,模拟测试计划名称重名场景。...测试用例-Mockito-Inline登场 使用Mockito来mock testPlanMapper模拟数据库返回基础,还需要额外对以下两个两个静态方法调用进行Mock。

3.2K10

Flutter实战 | 从 0 搭建「网易云音乐」APP(二、Splash Page、登录页、发现页)

其中 initUser() 方法就是用来从 SharedPreferences 获取用户信息,如果没有获取到就为null。...首先从上面的UI能看出来有两个动画效果: 1.hero动画2.logo 下方组件渐变以及改变位置 Hero比较简单我就不多说了,可以查看我以前文章: Flutter 手势处理 & Hero 动画 所有的登录组件被我封装在了组件...登录逻辑 前面说过,是使用 Provider 来存储用户信息,那么请求登录也使用 Provider 来控制,以达到 UI 数据分离效果。...发现页从上到下,一共分五块: 1.Banner2.分类3.推荐歌单4.新碟架5.MV 排行 其中除「分类」模块为本地外,其余都是网络请求数据。...Banner 使用控件,我之前也分享过文章:Flutter | 封装一个 Banner 轮播图。 其余也是用我之前写过Flutter | 定义一个通用多功能网络请求 Widget。

1.9K20
领券