3 回答

TA貢獻1828條經(jīng)驗 獲得超3個贊
在您的情況下,您可以使用Spy而不是模擬。
這將觸發(fā)構(gòu)造函數(shù)并將一個空列表分配給私有變量,從而逃避 NPE:
private UsersLoader loader;
@Before
public void setUp() {
loader = spy(new UsersLoader());
}
現(xiàn)在您不需要進行此調(diào)用:
doCallRealMethod().when(loader).loadExternalUsers(anyBoolean());
請記住,您需要模擬任何不需要在實現(xiàn)時觸發(fā)的方法。

TA貢獻1873條經(jīng)驗 獲得超9個贊
不要模擬 UsersLoader.class,這是包含您要測試的方法的類。當您創(chuàng)建一個模擬時,模擬類將不會被實現(xiàn),而是您可以模擬該類的功能。而是監(jiān)視它或只是實例化并為功能提供檢查手寫檢查。在后一種情況下,您根本不需要 Mockito。所以你可以窺探它并使用mockito的特性來測試它的功能

TA貢獻1796條經(jīng)驗 獲得超4個贊
首先,將初始化移動到字段的聲明中:
private Collection<User> users = new ArrayList<>();
然后,你可以用你自己的 mock 注入這個字段:
@RunWith(MockitoJUnitRunner.class)
class UsersLoaderTest {
@Mock
private Collection<User> users;
@InjectMocks
private UsersLoader loader;
}
然后驗證是否users.add()已與您預期的用戶一起調(diào)用。
添加回答
舉報