While writing Integration tests for spring applications, I tend
to come across checks for different Multilevel Data Objects For Eg:
AssertNotNull("Node 10 is null", getNode1().getNode8().getNode10().getNode7());
This assertions works well provided that Objects A -> B ->
C are not null, otherwise if any one of these is null, you end up
with an NPE.
最初の見解では、もっともらしい解決策は、すべての親ノード
AssertNotNull("Node 1 is null", getNode1());
AssertNotNull("Node 8 is null", getNode1().getNode8());
AssertNotNull("Node 10 is null", getNode1().getNode8().getNode10());
AssertNotNull("Node 7 is null", getNode1().getNode8().getNode10().getNode7());
しかし、私がすべてのノードでやってみると、あちこちに浮かんだコードが詰まってしまいます。
それは開発コードではないので、私は失敗の原因を見てみたいと思います。この場合、NPEを避けるか、まったくそれを避けないのがベストプラクティスでしょうか?
ベストアンサー
2つのケースでは、 Node10
の構造が NULL
である可能性があります
- ツリーを
Node8
に正常に渡すと、Node10
への参照が存在しないことがわかります。 - または、
Node10
へのルート上のノードが存在しないことを認識しているので、
Node10
への参照も存在しません。存在しないので、Node10
はnullでないと主張できません)
あなたのアサーションを行うには、 Node10
(アルゴリズムがどのように構造が構築されているかに依存します。例えば、再帰かもしれません)各レベルに次のステップが存在するかどうかをノードごとにチェックします。