2017-08-03 52 views
0

我們正在將Apache CXF資源遷移到Spring MVC。它發生了,我們更好地將資源遷移到服務,併爲所有人提供一個大的控制器。在這裏我們收到:將MockBean移到單獨的配置對象中

@Component 
public class MainResource { 
    ... 
    @Path("/first") 
    public FirstResource getFirstResource() { 
    ... 
    @Path("/second") 
    public SecondResource getSecondResource() { 

@Component 
public class FirstResource { 
    @GET 
    @Path("/") 
    public FirstEntity getFirstEntity() { 

@Component 
public class SecondResource { 
    @GET 
    @Path("/") 
    public SecondEntity getSecondEntity() { 

在這裏,我們現在有:

@Controller 
public class MainController { 
    @Resource 
    FirstService firstService; 
    @Resource 
    SecondService secondService; 
    ... 
    @GetMapping(/first) 
    public FirstEntity getFirst() { 
    ... 
    @GetMapping(/second) 
    public SecondEntity getSecond() { 

但是,當它來測試控制器的以下問題出現了:我們要在每一個分割每個服務測試,以便測試我們必須爲每個服務使用@MockBean(否則它無法啓動應用程序上下文)。所以這裏是問題:

@RunWith(SpringRunner.class) 
@WebMvcTest(MainController.class) 
public class FirstWebMvcTest { 
    @MockBean 
    FirstService firstService; 
    @MockBean 
    SecondService secondService; 

    // testing /first call only. secondService is not used 

@RunWith(SpringRunner.class) 
@WebMvcTest(MainController.class) 
public class SecondWebMvcTest { 
    @MockBean 
    FirstService firstService; 
    @MockBean 
    SecondService secondService; 

    // testing /second call only. firstService is not used 

我們不想複製@MockBean。作爲一個臨時解決方案,我已經把他們全部都轉到了基礎類。但我不喜歡擴展基礎測試類來獲得這個定義,在我看來,這似乎是一個骯髒的解決方案。理想情況下,我想將它移動到某個配置或其他位置。

感謝您的任何建議!

回答

1

您可以在測試src中創建一個@Configuration類。

@Configuration 
@MockBean(FirstService.class) 
public class foo{ 

} 

並在需要時將其導入,或如果組分掃描添加@Profile它,因此它會活躍當某一簡檔是活動的,用於測試和使用模擬豆。

+1

嗯,但它不會在測試中注入模擬.. –

相關問題