2017-02-14 115 views
0

我有一個春季啓動應用程序和應用程序應與其他一些組件進行交互。但是,在我的單元測試中,我只使用了應用程序功能,我想模擬外部API調用。我堅持,因爲我無法找到嘲笑情況下這樣的方式:春季啓動:注入模擬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 Boot文檔中的Mocking and spying beans

您可以在您的測試類中使用@MockBean,以用Mockito模擬實例替換自動佈線的bean。

+0

Yeap,已經找到它了。謝謝! – 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/test/java下