8

ビジネスロジックが ApplicationContext から特定のタイプの Bean をロードして処理する Bean があります。

jUnit テストでは、単体テスト クラス内にダミー Bean をいくつか作成し、テスト対象の Bean がそれらを適切に処理するかどうかを確認したいと考えています。ただし、これを達成するための最良の方法が何であるかはわかりません。

テスト クラス内で内部クラスを宣言するだけでは、Spring はそれをアプリケーション コンテキストの一部として保持しません。jUnit クラス内にアプリケーション コンテキストを挿入し、appContext.registerPrototype() を使用してそれを追加できることはわかっていますが、注釈を使用するよりクリーンな方法があるのではないかと考えました。

@Component で内部クラスにアノテーションを付けようとしましたが、当然のことながら、うまくいきませんでした。

public class PatchEngineTest extends TestBase {
    @Component
    protected class Patch1 extends PatchBaseImpl implements Patch{
        public void applyPatch() throws Exception {
            // does nothing
        }
    }


    @Autowired PatchRepository patchRepository;
    @Autowired Patch1 patch1;

    @Test
    public void test() {
        fail("Not yet implemented");
    }

}

当然のことながら、次のエラー メッセージが表示されます。

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.ia.patch.PatchEngineTest$Patch1] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

これを行う方法はありますか?

4

2 に答える 2

13

内部クラスを作成する必要がありますstatic。Spring は非static内部クラスを Bean としてインスタンス化できません。非にする必要がある正当な理由が本当にある場合は、メソッドstaticで手動で作成できます。@Bean

于 2013-10-18T02:26:16.930 に答える