サブタイプが常に有効なコンストラクター引数を使用することを知るために、基本クラスの前提条件を確認したいと考えています。
例として、次のコンストラクターを見てみましょう。
- 2 つ以上のパラメータを取ります
- さまざまなタイプのパラメーターを取る
- 1 つのパラメーターに対して、複数のチェックを実行します (たとえば、文字列が nullではなく、空でないなど) 。
その場合、Guava前提条件アプローチをどのように使用するのが最善でしょうか?
このようなモック例では: (これは不自然です!)
protected AbstractException(String errorMessage, Throwable errorCause) {
super(errorMessage, errorCause);
checkNotNull(errorMessage,
ErrorMessage.MethodArgument.CANNOT_BE_NULL_CHECK, "errorMessage");
checkArgument(!errorMessage.isEmpty(),
ErrorMessage.MethodArgument.CANNOT_BE_EMPTY_STRING_CHECK,
"errorMessage");
checkNotNull(errorCause, ErrorMessage.MethodArgument.CANNOT_BE_NULL_CHECK,
"errorCause");
}
への呼び出しはメソッドの最初の行である必要があるsuper
ため、引数をチェックする前に呼び出すことになります。したがって、ジレンマは次のとおりです。super
super(checkNoNull(errorMessage))
checkArgument
void
- すべての引数のチェックはどこで行うのですか? そのためだけにビルダーを作成したくありません
- 架空のように小切手を「グループ化」するにはどうすればよいですか
checkStringNotNullAndNotEmpty()
- むしろ、マッチャー フレームワークとの統合を検討する必要がありますか? (ハムクレスト、フェストのアサーション...)
デフォルトにはエラーメッセージが含まれていないため、奇妙に見える ErrorMessage.MethodArgument.CANNOT_BE_NULL_CHECK を使用しますthrow
。テスト側からは、これを「任意の」NPE ではなく引数検証の失敗として認識できませんか?
私はそれをすべて間違っていますか?