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的類的構造函數初始化,然後我爲它模擬沒有注入。
我該如何嘲笑這件事?
你可以添加一個替代的構造函數,或者將一個setAutoApi添加到ApiUtils類中嗎? –
@DawoodibnKareem如果我這樣做,我只會將其添加用於測試目的。我不想添加一種我不會在實際生產中使用的方法。 – Kousha
如果代碼更易測試,那麼它更易於維護,這是雙贏的。您不應該添加改善代碼可測試性的工件。 –