問題タブ [springmockito]
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.
spring-boot - @WebMvcTest のサービス層で Autowired Bean をモックする方法
Spring ブート gradle アプリで REST API をテストしています。@MockBean を使用してモックされたサービスが null を返しています。このモックされたサービスは、サービス クラスに Autowired の Bean がある場合に null を返します (コンストラクター インジェクションを使用しました)。
これがサンプルコードです(コンパイルされていません。理解のためだけです)
このテストを実行すると、次の出力が得られます (サービスが別の Bean を必要としない場合、期待される出力が得られます)
この応答により、.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8)); という行で問題に直面しています。また、応答本文をチェックするとき(本文もnullであるため)
問題を再現するためのサンプル プロジェクトはこちら
java - static void メソッドに doNothing() を実装するには?
1 つの static void メソッドをモックしようとしています。PowerMock を試しましたが、常に NullPointer 例外が発生します。
以下の呼び出しをモックしようとしています -
そして、メインクラスは -
私のテストクラスでこのように呼び出しをモックしようとしています -
また、SampleClass.class はコードの一部ではないことに注意してください。この外部クラスをコード ベースにインポートして、何らかのタスクを実行しました。
java - @InjectMocks コンストラクターとセッターによって @MockBean を注入すると、正しく動作しない
@RunWith(SpringJUnit4ClassRunner.class)
ゲッターとコンストラクター注入を使用してクラスのテストケースを作成しようとしました。@MockBean
セッター注入、@Mock
コンストラクター注入、@RunWith(SpringJUnit4ClassRunner.class)
およびMockitoAnnotations.initMocks(this);
Bean インジェクションを使用する場合。MockitoAnnotations.initMocks(this);
コンストラクターインジェクションが機能しないとコメントした場合。これで、すべての Bean が完全に注入されましたが、@Mock
beans(Contructor 注入された) Bean は、呼び出されたときに適切に機能しないメソッドをモックしました。
私のテストクラスは
インジェクションは正しく機能しています。問題は、私が使用している Bean のモックされたメソッドに属してい@Mock
ます。mockB.getValue()
mockC.getValue()
null
mockA.getValue()
java - Spring MVC - @WebMvcTest を使用してコントローラーをテストするときの @EnableGlobalMethodSecurity でのエラー 404
Spring プロジェクトに単体テストを追加しようとしています(ところで、統合テストは正常に動作します) が、コントローラーがインターフェースを実装する場合に (JSR-250 アノテーションを使用して)Controllers
構成を追加すると、非常に奇妙な動作が発生します (@EnableGlobalMethodSecurity
どのインターフェースでも)Controller
Springアプリケーションコンテキストには「リクエストハンドラー」として含まれていません(メソッドで確認しorg.springframework.web.servlet.handler.AbstractHandlerMethodMapping.processCandidateBean(String beanName)
ました:)、つまり、コントローラーで定義されたリクエストマッピング(@PostMapping
、...)は潜在的な場所として登録されていませんが、インターフェイスを削除すると、コントローラとパスが問題なく見つかります。
これは、単純なインターフェイスを備えた私のコントローラー (簡略化)MyInterface
です。
そして、これは Test クラスです (構成クラスを削除すると、@EnableGlobalMethodSecurity
すべて正常に動作します):
何が起こっているのかわかりません。注釈 JSR-250 (@RollesAllowed) に基づいたセキュリティを備えたコントローラーでの単体テストの例を見つけようとしましたが、有用なものは何も見つかりませんでした。 me) バグですが、よくわからないので、どんな助けでも大歓迎です。
ライブラリのバージョン:
- スプリング ブート バージョン: 2.2.2
- スプリングコア: 5.2.1
- モッキートコア: 3.1.0