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

校验country_list非空的单元测试是否合理?有无其他测试优化建议?

现有单元测试的适配性判断

你编写的两个断言方法本身逻辑是符合Python规则的:Python中空列表的布尔值为False,非空列表的布尔值为True,因此:

  • assertEmpty方法可以校验目标列表是否为空
  • assertNotEmpty方法可以校验目标列表是否非空

但当前存在一个核心问题:country_list是onCountry方法内部的局部变量,单元测试无法直接获取该变量的状态,所以你写的断言方法暂时无法直接生效。

更合理的测试方案

1. 先改造业务方法,暴露测试入口

可以选择两种改造方式:

  • 把country_list作为onCountry方法的返回值,修改示例:
def onCountry(self, doc_id):
    if(doc_id==None):
        return []
    # 中间原有逻辑保持不变
    # 末尾新增返回
    return country_list
  • 把国家列表计算的逻辑抽成独立的公共方法单独测试,绘图、打印逻辑留在onCountry中,测试聚焦性更强。

2. 补全测试覆盖场景

除了基础的空/非空校验,建议补充以下测试场景,保证业务逻辑正确性:

  • 传入None作为doc_id,校验返回的country_list为空
  • 传入没有对应访问数据的doc_id(mockfindBySubjectDocId返回空列表),校验返回的country_list为空
  • 传入有访问数据的doc_id(mockfindBySubjectDocId返回固定测试数据,比如[{"visitor_country":"CN"}, {"visitor_country":"US"}]),校验:
    • 返回的country_list非空
    • 列表内容符合预期(比如开启SHOW_FULL_NAMES时返回["China", "United States"],关闭时返回["CN", "US"])
    • 统计的国家数量和对应计数符合预期

3. 隔离外部依赖

单元测试时需要mock两类外部依赖,避免测试被外部环境影响、产生不必要的交互:

  • mockfindBySubjectDocId方法,固定返回预设的测试数据,无需依赖真实的数据库查询
  • mockmatplotlib的绘图相关方法,避免执行测试时弹出绘图窗口,影响自动化测试执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:27:06