テストの簡潔性とテストの簡潔さのために、好みに応じていくつかの方法があります。この回答のために、私は "在庫" Java 8とJUnit 4を追加の依存関係なしで固執します。
一つの方法は、comment by Ole V.V.で提案されているように、これは主に動作しますが、オプションが空の場合は、その後、get()
はNoSuchElementException
をスローします
assertEquals("correct", opt.get());
を書くことだけです。これは、JUnitに障害の代わりにエラーを通知させます。これは、必要ではない可能性があります。この場合、get()
がNSEEをスローすることを既に知っていない限り、何が起こっているのかはあまり明確ではありません。
代替は
assertTrue(opt.isPresent() && "correct".equals(opt.get()));
これもほとんどが作品ですが、デバッグが不便になるかもしれない不一致、ありますかどうかは、実際の値を報告しません。
別の方法としては、これは正しい障害を与え、不一致があります時に実際の値を報告し
assertEquals("correct", opt.orElseThrow(AssertionFailedError::new));
ですが、それはAssertionFailedError
がスローされた理由について非常に明確なではありません。 Optionalが空のときにAFEがスローされることがわかるまで、しばらくそれを見ておく必要があります。
さらに別の代替は
assertEquals("correct", opt.orElseThrow(() -> new AssertionFailedError("empty")));
であるが、これは冗長取得し始めています。次の2つのアサーションにこれを分割することができ
は、
assertTrue(opt.isPresent());
assertEquals("correct", opt.get());
いますが、以前ため、冗長性のthis suggestionに反対していました。私の意見では、これは本当にひどく冗長ではありませんが、2つの別々のアサーションがあるので、いくつかのコグニティブオーバーヘッドがあります。これは間違っているわけではありませんが、少し微妙です。あなたがあなた自身のインフラストラクチャのビットを作成するために喜んでいる場合
最後に、あなたはAssertionFailedError
の適切な名前のサブクラスを作成し、このようにそれを使用することができます。コメントは、オレには
assertEquals("correct", opt.orElseThrow(UnexpectedEmptyOptional::new));
UPDATE VV提案
assertEquals(Optional.of("correct"), opt);
これは非常にうまくいきますが、実際にはこれが最高のものかもしれません。
私は単に 'assertEquals(" actual value "、testedMethod()。get());'オプションを空にすると例外が発生し、ユニットテストが失敗するのに十分です。本当に何も必要ありません。 –