bugfix> java > 投稿

SpringBootを使用するプロジェクトのテストを書いています。これは、典型的なController-Service-Repository構造を持つ単純なRESTAPIです。

私は最近、自分の書き方についてたくさん読んでいますユニットテスト正しく。

私が読んだ記事の1つはこれです:
https://medium.com/blog-quiqua/https-medium-com-blog-quiqua-unit-testing-your-api-controllers-879dbf01796f

著者は、私のプロジェクトで現在直面しているいくつかの問題について述べています。

私のプロジェクトでは、「Webレイヤー」、いくつかのセキュリティチェックを行い(主にベアラートークンを検証します)、着信DTOを「サービスレイヤー」次に、それを検証し、検証が失敗した場合に例外をスローする責任があります。

私の質問は簡単です: どのように書くのでしょうかユニットテスト私のために「Webレイヤー」期待して、言う要求の形式が正しくありませんValidationException-@ ResponseStatus(BAD_REQUEST)でアノテーションが付けられています-からスローされます「サービスレイヤー」

私はこれを考えすぎているのでしょうか。これらのテストは、単体テストではなく統合テストである必要がありますか?

ありがとう。

編集:

簡単な答えは、Serviceメソッドを呼び出すときにMockitoを使用して、ValidationException次に、応答ステータスコードを確認します。

しかし、別の問題があります。と呼ばれるエンティティがある場合EntityDTOこれには、任意の最大長の検証を伴うnameプロパティがあります。

長さを超えると、サービスはValidationExceptionカスタムメッセージ付き(つまり、「名前プロパティの最大長はXです」)。

もし私のValidationException一般的です(検証が失敗するとスローされます)私は「あるべき姿」でテストしていませんよね?少なくともそれは私の気持ちです...

編集2:

質問に回答済みのマークを付けます。 コントローラーテストは多くのロジックをテストするべきではないので、次のことだけをテストすれば問題ありません。

リクエストがOKの場合

リクエストがどのような方法でも有効でない場合は、BADREQUESTです

見つからない場合は見つかりません

等...

検証が失敗したときにエラーメッセージをテストする必要がある場合の最後の質問に答えると、それはWebサービスレイヤーの統合テストです。

回答 1 件
  • サービスをBeanとして注入し(たとえば、コンポーネントとしてマークする)、テストでモックします。次に、モックにValidationExceptionを発行させ、コントローラーでアサートしてステータスコード400を返します。応答を処理する方法はいくつかあるため、コントローラーがどのように見えるかを知らずに正確に行う方法を説明することはできません。

あなたの答え