[解決済み] Spring bootのcatchブロックにコードカバレッジを追加する
2022-02-16 07:39:04
質問
使用方法
2.1.6.RELEASE
これは私のserviceImplクラスで、repo.saveメソッドで、dbフィールドが重複している場合、例外をキャッチし、レスポンスで返します。
@Service
public class CoreVoucherServiceImpl implements CoreVoucherService {
@Override
@Transactional(propagation = REQUIRED)
public VoucherDTO createVoucher(VoucherDTO voucherDTO) {
... /* transforming DTO to Entity */
try {
voucherRepository.save(voucher);
} catch (Exception e) {
if (e.getCause() instanceof ConstraintViolationException) {
throw new MyException(FIELD_NOT_UNIQUE, "title");
}
UB_LOGGER.debug("Error in create voucher", e);
throw e;
}
voucherDTO.setId(voucher.getId());
return voucherDTO;
}
}
catchブロックのコードカバレッジを追加することができません。私のテストクラスは
@SpringBootTest
@RunWith(SpringRunner.class)
public class CoreVoucherServiceTest {
@Autowired
private CoreVoucherService coreVoucherService;
@MockBean
private VoucherRepository voucherRepository;
@Test
// @Test(expected = MyException.class)
public void createVoucherTest() {
VoucherDTO dto = prepareCreateVoucher();
when(voucherRepository.save(any())).thenThrow(Exception.class);
coreVoucherService.createVoucher(dto);
}
}
上記の方法で、以下のエラーが発生しました。
org.mockito.exceptions.base.MockitoException:
Checked exception is invalid for this method!
Invalid: java.lang.Exception
を持つExceptionを投げるにはどうすればよいですか?
getCause
は
ConstraintViolationException
ということで、すべての行がテストでカバーされます
解決方法は?
キャッチブロックの中で、2つのユースケースをテストする必要があります。
例外の原因が
ConstraintViolationException
.thenThrow(new RuntimeException(new ConstraintViolationException("Field not Unique", null, "title")));
例外の原因が
ConstraintViolationException
.thenThrow(new RuntimeException("oops"));
この場合
@ExpectedException
は、次のようになります。
RuntimeException
関連
-
[解決済み】不正な反射的アクセスとは?
-
[解決済み】"|="の意味は何ですか?(パイプ等号演算子)
-
[解決済み】Javaでユーザー入力を待機させる方法
-
[解決済み】どういう意味か。Serializableクラスがstatic final serialVersionUIDフィールドを宣言していないとは?重複している] [重複している] [重複している] [重複している
-
[解決済み] Spring Bootアプリケーションにポートを設定する方法
-
[解決済み] Spring BootでSQL文のログを取るには?
-
[解決済み] Spring Bootでapplication.propertiesファイルに定義された値にアクセスする方法
-
[解決済み] Mocha によるコードカバレッジ
-
[解決済み】コードカバレッジとその測定方法について教えてください。
-
[解決済み】Spring Boot起動後のコード実行について
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】リンクリストの負の値の数でnegativeCntrを代入する
-
[解決済み】不正な反射的アクセスとは?
-
[解決済み】「error: '.class' expected」の意味と修正方法について
-
[解決済み】非閉鎖文字リテラルエラー
-
[解決済み】java 'jar'が内部コマンドまたは外部コマンドとして認識されない。
-
[解決済み] intellijが自動配線リポジトリにタイプのBeanが見つからないと不正確な発言をする件
-
[解決済み】破損したjarファイル
-
[解決済み】Javaのswitch文。定数式が必要だが、定数である
-
[解決済み] [Solved] java.lang.NoClassDefFoundError: クラスXXXを初期化できませんでした。
-
[解決済み】どういう意味か。Serializableクラスがstatic final serialVersionUIDフィールドを宣言していないとは?重複している] [重複している] [重複している] [重複している