哈希映射键值对的选择性和特定打印



在编写测试自动化时,我需要利用开发人员提供的api,这些API接受HashMap作为参数。测试代码涉及调用几个这样的 api,并使用哈希映射作为参数,如下所示。

 Map<String,String> testMap = new HashMap<String,String>();

setName()
{
   testMap.put("firstName","James");
   testMap.put("lastName","Bond");
   String fullName=devApi1.submitMap(testMap);
   testMap.put("realName",fullName);
}
setAddress()
{
  testMap.put("city","London");
  testMap.put("country","Britain");
  testMap.put("studio","Hollywood");
  testMap.put("firstName","");
  testMap.put("person",myMap.get("realName"));
  devApi2.submitMap(testMap);
}

但是,要求是在setName和setAddress函数中打印testMap,但map应该只打印在相应函数中设置的交替行中的那些元素(键值对)。我的意思是 setName 应该在调用提交地图 api 之前打印 Map 中的 2 个元素,同样 setAddress 应该打印 5 个在调用提交地图之前设置的元素。

设置名称输出必须为:

  The data used for firstName is James. 
  The data used for lastName is Bond

设置地址输出必须为:

 The data used for city is London.
 The data used for country is Britain.
 The data used for studio is Hollywood.
 The data used for firstName is null.
The data used for person is James Bond

有什么帮助吗,为了实现这一目标?

我可能会编写一个辅助函数,该函数会将项目添加到地图并进行打印。

public static <K,V> void add(Map<K,V> map, K key, V value){
  System.out.println(String.format("The data used for "%s" is "%s"", key, value));
  map.put(key, value);
}

如果需要打印不同的消息,可以使用不同的帮助程序函数或将格式字符串作为参数传递。

我会创建一个方法,该方法将逗号分隔的键列表作为参数并仅打印它们。

像这样:

 public void printKeys(Map<String,String> map, String csKeys) {
      for(String key: csKeys.split(",")){
           if(map.conatinsKey(key)){
               System.out.println("The data used for " + key + " is " + map.get(key) );
           }
      }
 }

您可以像以下方式调用它:

printKeys(testMap, "firstName,lastName");
printKeys(testMap, "city,country,studio");
最好

在调用 submitMap 方法时创建testMap的副本,因为您没有标志来指示应打印哪些键值对。

你可以这样做

Map<String, String> printObj = new HashMap<String, String>
setName()
{
   testMap.put("firstName","James");
   testMap.put("lastName","Bond");
   String fullName=devApi1.submitMap(testMap);
   printObj.addAll(testMap);
   testMap.put("realName",fullName);
}

然后打印printObj而不是testMap

从您对我之前答案的评论来看,您似乎不希望从一种方法中输入的值显示在第二个方法中......

这可以很容易地完成,只需放置:

testMap.clear();

在每种方法的开头。

最新更新