問題タブ [springockito]

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.

0 投票する
2 に答える
602 参照

java - テスト実行中のコンテキスト内のモックオブジェクト

コンポーネントテストと統合テストの両方を備えたアプリケーションに取り組んでいます。その場合の違いは次のとおりです。コンポーネントテストは複数のクラスをテストし(つまり、その内部オブジェクトはすべてモックアウトされているわけではありませんが、一部は[JMSパブリッシャーなど]である可能性があります)、統合テストはすべてがモックアウトされています。つまり、Springはオブジェクトを提供し、そのままテストします。

ここまでは順調ですね。

問題は次のとおりです。Springコンテキストから依存関係を置き換えるために、Springockito(https://bitbucket.org/kubek2k/springockito/wiki/Home)を使用しました。これは、Beanをモックアウトする方法を提供します。 Springのコンテキストから。

だから-コンポーネントテストで-私はこれを持っています:

Beanには、依存関係としてSomeServiceInterfaceがあります。

上記の場合、SomeServiceInterfaceはモックに置き換えられます。もちろん、その例は問題を単純化しすぎています。Beanを、オブジェクトグラフのさらに下にある依存関係であるモックオブジェクトに置き換えます。

次のファイルからコンテキストをロードすることは注目に値します:spring-classify-test.xmlまた、クラスの実行後にコンテキストをダーティとしてマークすることも注目に値します。したがって、次のテストクラスであるAFAIKはコンテキストをリロードする必要があります。

今度は統合テスト:

spring-service-integration-test.xmlからコンテキストをロードしますが、Bean内のSomeServiceInterfaceはまだモックされています!統合テストで使用されるコンテキストも変更されました。

統合テストを@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)でマークすると、SomeServiceInterfaceがモックされているため、クラスの最初のテストは失敗しますが、コンテキストが既に更新されているため、次のテストは成功します。

面白いことは:

統合テストでSomeServiceInterfaceを注入するようにSpringに依頼すると、モックではなく、SomeServiceInterfaceの具体的な実装が注入されます。

私はその問題を解決するために多くのことを試みました:

  1. コンテキストからregisterBeanDefinitionメソッドを使用してコンポーネントのテストが実行された後、コンテキスト内のBeanをプログラムでオーバーライドします。

  2. IntegrationTestを実行する前にコンテキストを手動で更新できるように、TestExecutionリスナーを作成します

  3. 異なるコンテキストに同じローダーを使用してください。

  4. この話はどんどん続きます。

誰かが何か考えを持っていますか?

PS:Springockitoの採用は疑わしいアイデアだったことはよく理解していますが、その決定は私が行ったものではなく、プロジェクトには500を超えるテストがあります。したがって、Springockitoを削除するためにすべてをリファクタリングするのは大変な作業になるため、実行可能なオプションATM。

0 投票する
2 に答える
6210 参照

java - @ReplaceWithMock と @Qualifier

springockito-annotations 1.0.9統合テストに使用しています。

私は次のコントローラーを持っています:

テストでは、@ReplaceWithMockアノテーションを使用してコンテキストから Bean を置き換えます。

しかし、残念ながら@Qualifierアノテーションのない依存関係に対してのみ機能します。

つまり、私のテストは次のようになります。

最後のケースでは、コンテキストを初期化した後、DateCalculator および Accessor Bean のみが必要なモックに正しく置き換えられますが、別の Bean は main context からの通常の Bean として自動配線されます。

デバッグ後、QualifierAnnotationAutowireCandidateResolverが Bean を正しく識別できないことがわかりました。229から始まる以下の行:

Spring はモックされた依存関係から修飾子を抽出しようとしましたが、空です。

オブジェクトをモックするために依存関係を @Qualifier に正しく置き換える方法を知っておくとよいでしょう。

0 投票する
1 に答える
319 参照

java - spring がモック化されたオブジェクトに依存関係を注入しようとするのはなぜですか?

私はMockitoを初めて使用し、質問があります。

アプリに Spring の依存性注入を使用していて、コンポーネントをテストしようとしています。次のようなテストがあります。

コンテキストクラス:

TestBean.class:

別のTestBean.class:

このコードを実行すると、次の原因によるエラーが発生します。

org.springframework.beans.factory.NoSuchBeanDefinitionException: 依存関係のタイプ [info.imapping.application.configuration.context.AnotherTestBean] の適格な Bean が見つかりません: この依存関係の自動配線候補として適格な Bean が少なくとも 1 つ必要です。依存関係アノテーション: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

これは、Spring がモック Bean に依存関係を注入しようとしたことを意味します。誰かがこの動作を防ぐ方法を教えてもらえますか?

で使用する@ReplaceWithMockTestClass動作します。しかし、コンテキスト ファイルにモックアップを設定することをお勧めします。

0 投票する
1 に答える
393 参照

spring - SpringConfiguration にモック Bean を注入して別の Bean を作成する方法。

単体テストに問題があります。以下は、サンプル コード スニペットです。Bean をモックして @configuration クラスに注入し、モックされたプロパティを使用して別の Bean を作成します。

以下では、検査すると、b.getSomething() は文字列の場合は ""、int の場合は 0 などのデフォルト値を返します。など。嘲笑された値が得られません。どうすればいいですか?

0 投票する
1 に答える
430 参照

spring - Mockito スパイ - verify() は、チェックする代わりにメソッドを呼び出します

Springockito とスパイを使用して、エンド ツー エンド テスト中にサービス メソッドで呼び出しが行われたかどうかを確認しようとしています。プロセスも取得するサービスを自動配線し、それをスパイします。myService インスタンスはインストルメント化されていますが、verify() は以前の呼び出しを検証せず、元のメソッドを呼び出して null パラメーターを渡します。どうしてこれなの?

0 投票する
3 に答える
806 参照

spring - springockito xsd リンクが壊れています

Springockito の場所mockito.xsdが壊れているようです。

使用した
xsi:schemaLocation="http://www.mockito.org/spring/mockito https://bitbucket.org/kubek2k/springockito/raw/tip/springockito/src/main/resources/spring/mockito.xsd

しかし、これはもはや機能しません。現在のURIを知っている人はいますか?

0 投票する
1 に答える
109 参照

java - Java Spring: 複数のファイルでのコンテキストのモック

単体テストの目的でモックされた Spring Context を作成しようとしています。私たちの Spring 構成はかなり大きく、Spring + Springockito Annotations を使用してこれを取得しようとしています。

私が遭遇した問題は、コンテキストの作成/モッキングを処理する複数の Java クラスが必要だということです。今のところ、これは次のようになります (クラス a がクラス B とクラス C のリストをコンストラクター引数として受け取るとしましょう):

問題は、C サブクラスのリストがここにあるよりもはるかに大きいことです (1 つのクラスだけにすべての責任を負わせていることは言うまでもありません)。そのため、次のような作成を処理する別のクラスを考えました。

ListProvider.java:

Configurator.java:

しかし、問題は、ListProvider が正しく自動配線されても、@ContextConfigurationクラスを利用せず、ClassC サブクラスを見つけられないということConfigurator.javaです。 .

このコンテキスト構成を複数のファイルに分割する変更はありますか?