You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为需从API获取Token的ViewModel编写单元测试?

ViewModel单元测试问题解决方案

关于Dummy Token的使用

肯定要用dummy token,单元测试的核心是隔离外部依赖——你要测的是ViewModel本身的逻辑,不是真实的DataStore、API服务这些外部组件。直接依赖真实的getSession()获取Token,就会因为未登录返回null,把测试逻辑搅乱。正确的做法是把获取Token的依赖(比如DataStore封装类、Session管理类)Mock掉,让它在测试时返回你预设的dummy token,这样就能完全控制测试环境。

单元测试无法运行的排查&修复

你遇到的DataStore返回null的问题,本质是没做好依赖隔离。按下面的步骤调整:

  1. Mock Token依赖:用Mockito、MockK这类框架,把ViewModel依赖的Token获取组件Mock出来,强制返回预设的dummy token(比如"test_dummy_token"),彻底绕开真实的DataStore。
  2. 确保依赖注入:ViewModel的构造函数要通过依赖注入传入Token服务、API服务,这样测试时才能替换成Mock实例,而不是在内部直接创建真实对象。

针对你的测试验证点,给具体的测试逻辑:

数据加载成功场景

  • Mock Token服务返回有效dummy token
  • Mock API服务返回你预设的测试数据(比如固定长度的列表,第一条数据有明确的字段值)
  • 调用ViewModel的加载方法
  • 断言:
    • 数据列表非空
    • 列表长度和预设的测试数据长度一致
    • 列表第一条数据的字段(比如id、内容)和预设值完全匹配

数据不可用场景

分两种情况测试:

  • Token无效/缺失:Mock Token服务返回null或空字符串,触发加载后,断言数据为空或null
  • API返回空/错误:Mock Token有效,但API返回空列表或抛出异常,断言数据为空或null

是否需要提供GitHub仓库?

如果按上面的步骤调整后还是跑不起来,提供GitHub仓库会大幅提升排查效率。因为能直接看到你的代码结构、依赖注入方式、Mock的具体写法,更容易定位问题——比如Mock没生效、ViewModel里有未处理的空Token分支、测试断言逻辑写错了等。

内容的提问来源于stack exchange,提问作者Charlie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 02:34:52