Skip to content

iOS Keychain 测试 commands/ios/test_keychain.py ​

这个测试文件验证 objection 的 iOS keychain 命令模块,覆盖 dump/dump_raw/clear/add 四个命令及其辅助函数(--json/--data/--key/--smart flag 解析、smart decode 判定、flag 取值),同时验证人类模式与全局 JSON 模式(agent exec)两种输出路径。

📋 模块概览 ​

项目值
文件路径tests/commands/ios/test_keychain.py
被测对象objection.commands.ios.keychain
用例数17
框架unittest(mock.patch + capture)

🎯 测试意图 ​

  • 验证 should_output_json 全局标志与 --json arg flag 的判定。
  • 验证 _data_flag_has_identifier 在有/无 --data/--key 时的行为。
  • 验证 _should_do_smart_decode 与 _get_flag_value 辅助函数。
  • 验证 dump 人类模式表格输出、命令级 --json <file> 写文件、全局 JSON 模式返回结构化信封。
  • 验证 clear 在人类模式经 click.confirm 确认,JSON 模式跳过确认直接清空。
  • 验证 add 的参数校验、成功/失败人类文本与全局 JSON 状态返回。

🧪 用例清单 ​

用例行号验证点
test_should_output_json_in_arguments_returns_truetests/commands/ios/test_keychain.py:18--json 返回 True
test_should_output_json_in_arguments_returns_falsetests/commands/ios/test_keychain.py:22无 flag 返回 False
test_dump_to_screen_handles_empty_datatests/commands/ios/test_keychain.py:26空数据仍打印表头与提示
test_data_flag_check_ignored_without_data_flagtests/commands/ios/test_keychain.py:39仅 --key 返回 True
test_data_flag_is_checked_when_flag_is_specifiedtests/commands/ios/test_keychain.py:43--data+--key 返回 False
test_data_flag_is_checked_when_only_data_flag_is_specified_without_keytests/commands/ios/test_keychain.py:47仅 --data 返回 False
test_should_do_smart_decode_returns_truetests/commands/ios/test_keychain.py:51--json+--smart 返回 True
test_should_do_smart_decode_returns_falsetests/commands/ios/test_keychain.py:55仅 --json 返回 False
test_get_flag_value_gets_value_of_flagtests/commands/ios/test_keychain.py:59取 --key 的值
test_dump_rawtests/commands/ios/test_keychain.py:64触发 ios_keychain_list_raw
test_dump_to_json_filetests/commands/ios/test_keychain.py:72命令级 --json 写文件
test_dump_global_json_returns_structuredtests/commands/ios/test_keychain.py:86全局 JSON 返回 entries+count 信封
test_cleartests/commands/ios/test_keychain.py:106confirm=True 后清空
test_clear_global_json_skips_confirmtests/commands/ios/test_keychain.py:114JSON 模式跳过 confirm
test_adds_item_validates_data_key_to_need_identifiertests/commands/ios/test_keychain.py:127--data 缺 account/service 打印提示
test_adds_item_successfullytests/commands/ios/test_keychain.py:134add 成功人类文本
test_adds_item_with_failuretests/commands/ios/test_keychain.py:145add 失败人类文本
test_adds_item_global_json_returns_statustests/commands/ios/test_keychain.py:156全局 JSON 返回 added 状态

⚙️ 测试手法 ​

setUp/tearDown(:11、:15)用 set_json_output(False) 隔离全局 JSON 标志。辅助函数用例直接断言返回。命令用例 @mock.patch(...get_api) 注入 RPC,人类模式用 capture 捕获多行文本逐字比对。全局 JSON 模式用例(如 :86)调用 set_json_output(True),捕获后用 _json.loads(output[output.index('{'):]) 提取信封并断言 status/command/result。clear 的 JSON 模式用例(:114)验证 assertNotIn('Are you sure') 确认跳过交互。

🔍 源码索引 ​

用例位置
test_should_output_json_in_arguments_returns_truetests/commands/ios/test_keychain.py:18
test_should_output_json_in_arguments_returns_falsetests/commands/ios/test_keychain.py:22
test_dump_to_screen_handles_empty_datatests/commands/ios/test_keychain.py:26
test_data_flag_check_ignored_without_data_flagtests/commands/ios/test_keychain.py:39
test_data_flag_is_checked_when_flag_is_specifiedtests/commands/ios/test_keychain.py:43
test_data_flag_is_checked_when_only_data_flag_is_specified_without_keytests/commands/ios/test_keychain.py:47
test_should_do_smart_decode_returns_truetests/commands/ios/test_keychain.py:51
test_should_do_smart_decode_returns_falsetests/commands/ios/test_keychain.py:55
test_get_flag_value_gets_value_of_flagtests/commands/ios/test_keychain.py:59
test_dump_rawtests/commands/ios/test_keychain.py:64
test_dump_to_json_filetests/commands/ios/test_keychain.py:72
test_dump_global_json_returns_structuredtests/commands/ios/test_keychain.py:86
test_cleartests/commands/ios/test_keychain.py:106
test_clear_global_json_skips_confirmtests/commands/ios/test_keychain.py:114
test_adds_item_validates_data_key_to_need_identifiertests/commands/ios/test_keychain.py:127
test_adds_item_successfullytests/commands/ios/test_keychain.py:134
test_adds_item_with_failuretests/commands/ios/test_keychain.py:145
test_adds_item_global_json_returns_statustests/commands/ios/test_keychain.py:156

🔗 相关文档 ​

  • 对应被测模块文档:/reference/commands/ios/keychain(如存在)

基于 GPL-3.0-or-later 许可发布