以下は私の問題の図です。現在のところ、NullPointerExceptionをどのように処理するかはわかりません。ユニットテスト中に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);
}
}
上記のコードは、期待どおりにNullPointerExceptionを返します。私の関心は、私は、コンストラクタまたは関数自体
機能で
public Util(Map<Integer, String> myMap)
{
if(myMap != null)
this.myMap = myMap;
else
this.myMap = new Map<>();
}
を次のようにコンストラクタになり、それは似たものになるだろうと
public String getVal(Integer region)
{
if(myMap != null)
return myMap.get(region);
else
return "";
}
で、それを処理しなければならないところであります
これらのアプローチのどちらが優れていますか?
この場合、一般的な「良い」ものはありません。そのコードをどのように動作させるかによって異なります。 –
インスタンスをnull参照で作成するには、それを有効にしますか?その時点でそれはまったく役に立ちますか? (私はこれが本当にテストの質問であることは正直言ってわかりません。どのようにあなたのクラスが振る舞うかを決めると、あなたはそれを簡単に十分にテストできるはずです。) –
それは必要に応じて異なります。 'Util'の目的は何ですか?マップの代わりに表現されるマップは何ですか?インスタンス内でnullになる可能性はありますか?あなたがUtilにヌルマップを持つことを受け入れるなら、セッターを持っていますか? (もしそうでなければ、あなたは最終的に置くことができる)。あなたがsetterを持っていない場合は、あなたが望むgetValueの結果は何ですか?例外をスローし、nullを返します。 nullpointerは常に期待に依存します。 – AxelH