私はいくつかのコードを非同期に変換しています。元の単体テストでは注釈@Test(expected = MyExcpetion.class)
を使用しましたが、私がアサートしたい例外はjava.util.concurrent.ExcutionException
にラップされているため、これは機能しないと思います。私はこのように自分の将来を呼び出してみましたが、私の主張は、まだ失敗していると私は、私もこの味を試してみましたreturn null
将来どのように例外をテストできますか?
myApiCall.get(123).exceptionally((ex) -> {
assertEquals(ex.getCause(),MyCustomException.class)
return null
}
に追加する必要がありましたことを愛していないが、まだ働いていない
myApiCall.get(123).exceptionally((ex) -> {
assertThat(ex.getCause())
.isInstanceOF(MyException.class)
.hasMessage("expected message etc")
return null;
}
IDを見つけることができない場合、私のAPIは単に例外をスローします。これを適切にテストするにはどうすればよいですか?とにかく元の注釈を使用できますか?
実行時に私のapiコールがdbに届きます。このテストでは、エラーを返すように未来を設定しているので、実際に何かと通信しようとはしません。テスト対象のコードが、私は例外をテストし、また、ユニットテスト、これを維持することができるように不正なデータを返すためにmyService.getFromDB(id)
を強制するユニットテストでこの
public class myApiCall {
public completableFuture get(final String id){
return myService.getFromDB(id)
.thenApply(
//code here looks at result and if happy path then returns it after
//doing some transformation
//otherwise it throws exception
)
}
}
のように見えるデシベルなどに
おそらく、あなたの 'get'は別のスレッドに委譲します。 JUnitは完了を待たないことに注意してください。テストメソッドを終了すると、Javaプロセスが終了します。代わりに、結果を待つためにCFで 'get'を実行します。例外がある場合は、それをアンラップしてそこにアサートしてください(あるいはそれをやり直して、あなたの 'expected'を使用してください)。 –
ここにmyApiCallとは何ですか? – fxrbfg
apiコールはデータのためにdbに届きます。上記のコードで何かを更新しましょう。 – Barry