散列映射键 - 值对的选择性和特定打印

时间:2012-09-15 18:53:45

标签: java

在编写测试自动化时,我需要利用开发人员提供的api,这些api接受HashMap作为参数。测试代码涉及使用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应该在map中打印2个元素,这些元素在调用submitMap api之前设置,同样setAddress应该打印5个元素,这些元素在调用submitMap之前设置。

setName输出必须是:

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

setAddress输出必须是:

 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

任何帮助,为了实现这个目标?

4 个答案:

答案 0 :(得分:0)

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

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);
}

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

答案 1 :(得分:0)

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

类似的东西:

 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");

答案 2 :(得分:0)

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

你可以这样做

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

答案 3 :(得分:0)

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

这可以轻松完成,只需放置:

testMap.clear();

在每个方法的开头。