0

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

 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,但映射应该只打印在相应函数中设置的交替行中的那些元素(键值对)。我的意思是 setName 应该打印在调用 submitMap api 之前设置的 Map 中的 2 个元素,同样 setAddress 应该打印在调用 submitMap 之前设置的 5 个元素。

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

4 回答 4

0

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

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

testMap.clear();

在每个方法的开头。

于 2012-09-16T09:33:57.320 回答
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

于 2012-09-15T23:15:06.540 回答
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");
于 2012-09-15T19:00:15.527 回答
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);
}

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

于 2012-09-15T18:55:38.260 回答