2017-02-14 21 views
0

私はスプリングブートアプリケーションと、アプリケーションと対話する必要のある他のコンポーネントを持っています。しかし、私の単体テストでは、私はちょうどアプリケーション機能を使用しています。私は外部API呼び出しを模擬したいと思います。私はこのような場合を模擬するための方法を見つけることができないように私は立ち往生しています:mainメソッドを持つスプリングブート:Runnerクラスにモック注入

マイスタートクラス:

@ComponentScan("com.sample.application") 
@SpringBootApplication 
public class MyApp implements CommandLineRunner { 

    @Autowired 
    private OuterAPI outerAPI; 

    public static void main(String[] args) { 
     SpringApplication.run(AdRedirectorMain.class, args); 
    } 

    @Override 
    public void run(String... args) throws Exception { 
     outerAPI.createInstances(); 
    } 

    ... 
} 

そしてここでは、私のテストクラスの例である:

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringBootTest(classes = MyApp.class) 
public class MyAppTest { 
    // any tests 
} 

私はSpring Boot、JUnit、Mockitoと協力しています。

私はこの問題に直面しています。どのようにしてリフレクションやその他の方法でMockitoでcreateInstances()を呼び出すのを避けることができますか?

答えて

2

SpringブートのドキュメントでMocking and spying beansをご覧ください。

テストクラスで@MockBeanを使用して、autowired beanをMockitoモックインスタンスに置き換えることができます。

+0

イェップ、すでに見つかりました。ありがとうございました! – quento

2

あなたは@MockBeanhttp://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/mock/mockito/MockBean.html

使用するかは、あなたOuterAPI実装は、あなたのテストのためにあなたがouterAPI.createInstances();

別のオプションへの実際の呼び出しの代わりにダミーの呼び出しを行うダミー実装を提供するインタフェースを定義することができます

@Configuration 
@Profile(value = {"yourtest-profile"}) 
public class TestConfiguration{ 

@Primary 
    @Bean 
    public OuterAPI outerAPI() { 
     return Mockito.mock(OuterAPI.class); 
    } 

} 

とSCR /テスト/ javaの

下に置く:あなたが持っているということは、このような構成のクラスを持つことです
関連する問題