在单元测试时,在哪里处理NullPointerException(在函数或构造函数中)

Pra*_*oor 3 java unit-testing

以下是我的问题的说明.我目前不知道处理NullPointerException的方法.

public class Util
{
   private Map<Integer, String> myMap;

  public Util(Map<Integer, String> myMap)
  {
     this.myMap = myMap;
  }

  public String getVal(Integer region)
  {
     return myMap.get(region);
  }
}


public class UtilTest {

  @Test
  public void testNull() throws Exception{
    Map<Integer, String> myMap = null;
    Util util = new Util(myMap);

    util.getValue(1);
  }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码将按预期给出NullPointerException.我关心的是我应该在构造函数或函数本身中处理它

在构造函数中如下

  public Util(Map<Integer, String> myMap)
  {
     if(myMap != null)
     this.myMap = myMap;
     else
     this.myMap = new Map<>();
  }
Run Code Online (Sandbox Code Playgroud)

在功能上,它将类似于

 public String getVal(Integer region)
 {
   if(myMap != null)
   return myMap.get(region);
   else
   return "";
 }
Run Code Online (Sandbox Code Playgroud)

哪种方法更好,为什么我应该采用另一种?

pra*_*ash 9

它应该在Util类中,因为外部函数应该不了解Util类创建内部的内容.它可以发送任何无效/有效值.构造函数应确保正在妥善处理所有无效/有效值.

对此的另一个看法是 - 如果有n个地方创建了Util,那么你必须在所有那些n个地方写下if-else.最好只在构造函数中使用它.