問題タブ [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.
java - コントローラーの単体テスト時に Spring Validator をモックする
別のプロジェクトが作成したコードの事後検証の単体テストを作成しているときに、コントローラーにバインドされているバリデーターをinitBinder
?でモックする方法に関するこの問題に遭遇しました。
通常、入力が有効であることを確認し、バリデーターでいくつかの追加の呼び出しを行うことを検討しますが、この場合、バリデーター クラスはいくつかのデータ ソースを介してチェックを実行することと結合されており、テストが非常に面倒になります。カップリングは、使用されているいくつかの古い共通ライブラリにさかのぼり、それらすべてを修正する現在の作業の範囲外です。
最初は、PowerMock を使用してバリデーターの外部依存関係をモックアウトし、静的メソッドをモックしようとしましたが、最終的には、クラスの作成時にデータ ソースを必要とするクラスに遭遇し、それを回避する方法が見つかりませんでした。
次に、通常のmockitoツールを使用してバリデーターをモックアウトしようとしましたが、それもうまくいきませんでした. 次に、呼び出しでバリデーターを設定しようとしましたが、それはバリデーターの注釈mockMvc
以上のものを登録しません。最後に、この質問@Mock
に遭遇しました。しかし、コントローラー自体にはフィールドがないため、これも失敗します。では、どうすればこれを修正できますか?validator
バリデーター:
コントローラ:
テストクラス:
例外:
java - カスタム戻り値ハンドラーを使用した MockMVC 非同期テスト
MockMvc を使用して、非同期の結果で Spring 4.1 コントローラーをテストしようとしています。ここで説明したのと同じパターンに従いました。
ただし、ここで説明するように戻り値ハンドラーを使用しているため、私のテストは異なります。
https://github.com/AndreasKl/spring-boot-mvc-completablefuture
私のテストコードは次のようになります。
StandaloneMockMvcBuilder.setCustomReturnValueHandlers() を使用して戻り値ハンドラーを設定しても、呼び出されることはないようです。これにより、結果が Callable または DeferredResult ではないため、request().asyncStarted() のアサーションが失敗します。
ハンドラーを正しく設定していますか、それとも他に何か不足していますか?
==== ソリューション ======
ドキュメントを読み、デバッガーでステップスルーした後、setCustomReturnValueHandlers() がハンドラーをリストの最後に追加するのに対し、spring-boot-mvc-completablefuture の例ではそれを DeferredResult ハンドラーの前に挿入することがわかりました。非スタンドアロン モードを使用すると、これが可能になります。
java - Spring Junit4TestRunner Autowired null
アプリケーションのコンテキスト
ジュニットテスト
テストコンテキスト
上記の Junittestcase を実行すると、autowire が null になります。
メイン メソッドを実行し、ClassPathXmlApplicationContext を使用すると、Bean が読み込まれ、autowire が null ではありません。
spring-mvc - 統合テストでのSpring MVC Mixing xmlとJava @ContextConfiguration
@Configuration
XML 構成と注釈付きクラスの組み合わせを使用して、Spring MVC 統合テストを構成しようとしています。
Java 構成が正しく初期化されます。問題は、"**/security-config.xml"
初期化中にファイルが見つかり、解析されることです...そこで定義されているすべてのSpringセキュリティBeanは、WebApplicationContext
.
私の質問は、Spring MVC 統合テストで XML ベースの構成と注釈付きの構成の両方をどのように利用するのですか?
春のセキュリティ構成をJava/注釈付きベースのものに変更できます...私はむしろこれをしたくありません。java 構成を使用するよりも、Spring セキュリティ名前空間を使用する方が読みやすく簡潔です。
また、この結合された XML/Java 構成は、非テスト環境で完全に正常に機能することに注意してください。
- 春 v4.1.6
- 春のセキュリティ v4.0.1
WebApplicationContext 構成:
RootConfig.class
security-config.xml
spring-security - セキュリティとセッションを使用した Spring MVC テスト
ログインに成功した後、セッションに1つのオブジェクトを保存しています。セッションに保存されたそのオブジェクトを使用して、次のリクエストの運命を決定します。しかし、セキュリティサポートでSpring MVCテストを使用してテストしているとき、認証が成功した後、そのセッションオブジェクトを設定できません。ログイン時にオブジェクトが設定されたセッションを提供しようとしましたが、春のセキュリティがそのセッションをクリアしていると思います。
では、Spring MVC テストでログインに成功した後、そのオブジェクトをセッションに設定するにはどうすればよいですか。
spring-mvc - Spring MockMvc と非同期コントローラーの HTTP ステータス コード
コントローラーが非同期サーブレットの性質を持つ場合、MockMvc で 500 内部サーバー エラーを検証/テストするにはどうすればよいですか?
サーバーが 500 内部エラーを http コードとして適切なエラー メッセージと共に送信することを検証する必要があるテスト ケースの一部として、REST エンドポイントの単体テスト ケースを作成しています。
これが私のスプリングブートベースのアプリです:(読みやすくするためにすべてのインポートは省略されています)
これが私の MovkMvc JUnit テスト ケースです。
以下はコンソールの出力です。
上記のログから、MockMvc が http ステータス コードを 500 ではなく 200 として返していることが明らかです。エラー メッセージは問題ありません。
Chrome postman を使用してエンドポイントを呼び出すと、画像に添付されているように 500 内部サーバー エラーが表示されます