2017-06-29 104 views
0

我有一些API客戶端通過揚鞭自動生成,爲簡單起見,讓我們說我有(這是自動生成的):模擬招搖自動生成API類

  • ApiClient < - 這是基本客戶
  • UserApi < - 這需要在ApiClient它的構造

現在我已經創建了一個ApiUtils

public class ApiUtils { 
    private UserApi userApi; 

    public ApiUtils(final ApiClient apiClient) { 
     userApi = new UserApi(apiClient); 
    } 

    // Methods here 
} 

我想嘲笑這個班,我希望我可以用InjectMethod作爲UserApi。我試過如下:

public class ApiUtilsTest { 
    @Mock 
    private ApiClient apiClient; 
    @Mock 
    private UserApi userApi; 

    @InjectMock 
    private ApiUtils apiUtils; 

    @Before 
    public void setUp() { 
     MockitoAnnotations.initMocks(this); 
     apiUtils = new ApiUtils(apiClient); 
    } 

    @Test 
    public void testSomething() { 
     when(userApi.doSomething).thenReturn(myMock); 
     apiUtils.someMethodThatUsesApiUser ... 
    } 
} 

但由於UserApi在utils的類的構造函數初始化,然後我爲它模擬沒有注入。

我該如何嘲笑這件事?

+0

你可以添加一個替代的構造函數,或者將一個setAutoApi添加到ApiUtils類中嗎? –

+0

@DawoodibnKareem如果我這樣做,我只會將其添加用於測試目的。我不想添加一種我不會在實際生產中使用的方法。 – Kousha

+0

如果代碼更易測試,那麼它更易於維護,這是雙贏的。您不應該添加改善代碼可測試性的工件。 –

回答

0

我創建了一個簡單的library,它使用Mockito支持mocking Swagger生成的存根作爲服務端點(在本地端口上)。

實現風格和代碼生成設置將影響事情是否會起作用,但至少這是一個起點。隨意提交問題和/或PR以支持您的使用案例。