1. ホーム
  2. java

[解決済み] テスト中の@Autowiredプライベートフィールドの注入

2023-04-22 16:24:08

質問

私は、基本的にアプリケーションのランチャーであるコンポーネントをセットアップしています。それはこのように構成されています。

@Component
public class MyLauncher {
    @Autowired
    MyService myService;

    //other methods
}

MyServiceは、アノテーションとして @Service Springアノテーションを使用しており、問題なくランチャークラスに自動配線されています。

MyLauncherのjUnitテストケースを書きたいので、このようなクラスを立ち上げてみました。

public class MyLauncherTest
    private MyLauncher myLauncher = new MyLauncher();

    @Test
    public void someTest() {

    }
}

MyServiceのMockオブジェクトを作成し、テストクラス内のmyLauncherにインジェクトすることは可能でしょうか?現在、Springが自動配線を処理しているため、myLauncherにゲッターやセッターを持たせていないのです。できれば、ゲッターやセッターを追加する必要はないようにしたいのですが。自動配線された変数にモックオブジェクトを注入するようにテストケースに指示できますか? @Before init メソッドを使用して自動配線された変数にモックオブジェクトを注入するようにテストケースに指示できますか?

もし私がこのことについて完全に間違っているなら、遠慮なく言ってください。私はまだこれに新しいです。私の主な目標は、いくつかのJavaコードまたはアノテーションを持ち、モックオブジェクトをその @Autowired 変数にモックオブジェクトを入れるJavaコードやアノテーションを用意することです。 applicationContext-test.xml ファイルを作成する必要はありません。私はむしろ、テストケースのためにすべてを .java ファイルでテストケースのためにすべてを維持する方が、テストのためだけに別のアプリケーションコンテンツを維持するよりも望ましいです。

私は Mockito を使いたいと思っています。過去に私はこれを org.mockito.Mockito でオブジェクトを作成し Mockito.mock(MyClass.class) .

どのように解決するのですか?

MyLauncherのモックをテストに注入することは可能です。 どのようなモッキング・フレームワークを使用しているかを示せば、誰かがすぐに答えてくれると思います。 mockitoの場合、@RunWith(MockitoJUnitRunner.class)を使い、myLauncherのアノテーションを使うことを検討します。 以下のような感じでしょうか。

@RunWith(MockitoJUnitRunner.class)
public class MyLauncherTest
    @InjectMocks
    private MyLauncher myLauncher = new MyLauncher();

    @Mock
    private MyService myService;

    @Test
    public void someTest() {

    }
}