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

Java Cucumber Selenium脚本中调用Map.put()时出现java.lang.UnsupportedOperationException错误的问题排查

解决Cucumber DataTable转Map后无法执行put操作的问题

兄弟,这问题我太熟了!你踩的是Cucumber DataTable的一个小坑——咱们来拆解一下:

你通过dataTable.asMaps().get(0)拿到的Map,是Cucumber返回的不可修改(unmodifiable)集合。内部其实是用Collections.unmodifiableMap()做了包装,目的是防止你意外修改feature文件里的原始测试数据,保证测试用例的稳定性。这种Map不支持put()、remove()这类修改操作,一调用就会抛出java.lang.UnsupportedOperationException。

看你的代码片段:

public void editFields(DataTable dataTable) {
    Map<String, String> inputData = dataTable.asMaps().get(0);
    String eDate = Utils.getCAProperty("effectiveDate");
    inputData.put("Ef Date", eDate ); // 此行报错,无法添加数据
}

快速解决方法

只需要把这个不可修改的Map转成一个可修改的Map实现类就行,这里给你两种常用方案:

  • 用HashMap包装原Map,生成可修改的新集合:
public void editFields(DataTable dataTable) {
    // 用HashMap包装原Map,生成可修改的新集合
    Map<String, String> inputData = new HashMap<>(dataTable.asMaps().get(0));
    String eDate = Utils.getCAProperty("effectiveDate");
    inputData.put("Ef Date", eDate ); // 现在就能正常添加了
}
  • 如果需要保留原Map的字段顺序(和feature文件里的顺序一致),可以换成LinkedHashMap:
Map<String, String> inputData = new LinkedHashMap<>(dataTable.asMaps().get(0));

这样处理后,你就可以自由地往Map里添加、修改键值对了,不会再触发那个异常~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 22:44:05