問題タブ [spring-mvc-test]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
testing - Spock & Spock Reports: AssertionError のエラー メッセージを「キャッチ」してカスタマイズする方法は?
私は働いています:
- スポック・コア
- スポックレポート
- スポックスプリング
- Spring MVC テスト
そして、私は次のコードを持っています:
ここでは、テストされているメソッドがではなく実際に返されるため、コードは失敗します(どのように予想されるか) 。 (MediaType.APPLICATION_JSON)
(MediaType.APPLICATION_XML)
という理由で@FailsWith(java.lang.AssertionError.class)
。
使ってもスポックレポート@FailsWith(value=java.lang.AssertionError.class, reason="JSON returned ...")
が見れないreason
質問 1 : どうすればSpock レポートreason
を表示できますか?
Spock が throw ()メソッドを提供していることは知っているので、次のことができます。
悲しいことに、スローは AssertionError では機能しません。
テストメソッドを使用するthrown(AssertionError)
と、パスしない場合、独自の方法で通過しますが、AssertionError からエラーメッセージ@FailsWith
を取得できません
質問 2 AssertionError からエラー メッセージを取得するにはどうすればよいですか?
私は次のようなことができることを知っています
しかし、質問2が解決できるかどうかは興味深い..
java - Spring ブート テスト: テストはパスしますが、パスする必要はありません (誤検知)
失敗しないテストを含むSpring Bootプロジェクトがあります(ただし、失敗するはずです)。
私は何か間違ったことをしていますか、それともSpringの問題ですか?
小さな例として、2 つのエンティティ (ユーザーとカテゴリ) と DELETE メソッドを持つ 1 つのコントローラー クラス ( https://github.com/sk8ter/demo )を持つ小さなプロジェクトを作成しました。
カテゴリ エンティティには、カスケードオプションのないユーザー エンティティの ID があるため、カテゴリを持つユーザーの削除中に失敗するはずです。
コントローラーも非常に単純です。
そして最後にテスト:
DemoApplicationTestsから@Transactionalアノテーションを削除すると、テストは失敗しますが、この場合、変更は DB にコミットされます。
テストでコメントされた 3 行も役に立ちません。
json - ObjectMapper によるクラスのシリアル化中に属性を無視する方法
サーバー側のロジックに必要な多くの属性を持つクラスがありますが、そのうちのいくつかは UI に必要です。クラスから json を作成すると、すべての属性が json に書き込まれます。jsonに変換するときだけ、いくつかの値を無視したい。で試しました@JsonIgnore
。しかし、それは機能していません。
私のクラスは
そして、私はこれを使用して書いています
ここで何が問題なのですか、助けてください
json - Spring MVC テスト フレームワーク - JSON エンドポイントがテストでのみ 406 を返す
私は、Hibernate と JPA を利用して、Web ブラウザーから呼び出されたときにのみ JSON を正常に返す単一のエンドポイントを持つ、機能する Spring MVC Web アプリを構築しました。
また、クラス、特にエンドポイントをマップするメイン コントローラーに対してユニット テストに合格しました。
そこで私の次のステップは、Spring MVC テスト フレームワークを使用していくつかの動作テストを作成し、JSON エンドポイントをそのすべての動作部分 (構成、コントローラー、サービス、モデル、およびリポジトリー) でテストすることでした。
アプリケーション構成を使用し、物事を一緒に注入/自動配線し、エンドポイントに対して「GET」リクエストを行うテストを正常にセットアップしました。呼び出しをデバッグして、コントローラーのエンドポイントに到達し、サービスを介してリポジトリに到達し、データを正常に取得して正しいモデル オブジェクトを返すことができます。ただし、コントローラーは 406 の受け入れられない応答を返し、テストは失敗します。
私はこの問題に2日間取り組んでおり、ほぼすべてのブログ投稿とSOの回答を読みましたが、提案はありません。
これが私のコントローラーです:
サービス:
リポジトリ:
コア機能に関連する依存関係:
JPA コンテキスト:
Web.xml:
サーブレット構成:
失敗したテスト:
ここで重要なことは、アプリケーションはブラウザーを介して完全に機能しますが、コントローラーが応答を返す時点で spring mvc テスト フレームワークを使用すると失敗することです。
アップデート:
解決策は、私の servlet-config.xml を jpaContext とともに に注入することでし@ContextConfiguration
た。その後、テストは完全に実行されました。
興味深いことに、クラスパスから servlet-config.xml をロードすることはできませんでしたが、テスト固有のバージョンを維持する必要がなかったため、リソース フォルダーに移動しました。それが良いアイデアだったかどうかは未定ですが、クラスパスから動作するようになりました。
spring-security - Spring セキュリティ テストを使用してセキュアな Spring MVC コントローラーをテストする
Spring Security Testを 使用して、Spring Security の背後に配線されているSpring MVC アプリのテストを作成する方法に関するドキュメントに従ってください。
これは、典型的なスプリング セキュリティ ワイヤリングを採用したバニラ スプリング ブート アプリケーションです。ここにメインの Application.java があります
スプリングセキュリティの配線は次のとおりです。
ご覧のとおり、"/" と "/sign_up" のリクエストを除いて、すべてのリクエストが認証される必要があります。アプリケーションをデプロイして、認証スキームが正常に機能することを確認しました。
ここからが興味深い部分です。Spring MVC テストの作成です。私が提供したリンクは、 spring-security-testフレームワークがモック ユーザー/セキュリティ コンテキストの挿入を許可するようなテストを作成するためのいくつかの良い方法を提供します。というアプローチをとりました
- モック UserDetails インターフェイスを定義し、
- SecurityContextFactory を使用して SecurityContext を作成します。
- テストの起動中にアプリケーション コンテキストに挿入する必要があります。
1. のコードは次のとおりです。
2. のコードは次のとおりです。
最後に、テストクラスは次のとおりです。
テスト実行の出力:
- テスト 1 に合格します。
- 2 パスをテストします。
- テスト 3 は失敗します。出力が期待されていましたが、<> が得られました。
「SecurityContext」が適切に設定されていないため、テスト 3 が失敗した可能性が非常に高いです。ドキュメントによると、それはうまくいったはずです。私が逃したものがわからない。どんな助けでも大歓迎です。
java - スプリング ブート コントローラー テスト、mockMov はモックしません
Spring MVC と Spring ブートを使用して、Restful サービスを記述します。このコードは、postman を介して正常に動作します。コントローラーが投稿要求を受け入れるための単体テストを実行すると、モックされた myService は、 when... thenReturn によって定義されたモック値を返すのではなく、常に自身を初期化します...私は verify( を使用しますMyService,times(1)).executeRule(any(MyRule.class)); モックが使用されていないことを示しています。また、mockMoc に standaloneSetup を使用しようとしましたが、パス "/api/rule" のマッピングが見つからないと不平を言います。誰でも問題を理解するのを手伝ってもらえますか?
以下は、MyService がインターフェイスである私のコントローラー クラスです。そして、私はこのインターフェースを実装しました。
spring - SpringMVC URL パス パターンの置換
SpringMVC に次のような URL パス パターンがあります。
personId = 2 と addressId = 3 を持っています 簡単に生成する方法はありますか
SpringMvc 内でユーティリティ メソッドを使用していますか?