我正在尝试测试我的一个名为 Store 的类,特别是下面名为 removeFromFavourite 的方法是该方法
public void removeFromFavourite(Quote quote) {
if(quote == null) {
throw new IllegalArgumentException("Quote can't be null");
}
if (quote.getId() <1) {
throw new IllegalArgumentException("Quote id can't be less than 1");
}
realm.beginTransaction();
QuoteRealMObject object = realm.where(QuoteRealMObject.class).
equalTo(QuoteRealMObject.ID, quote.getId()).findFirst();
if(object != null) {
deleteObject(object);
}
realm.commitTransaction();
}
private void deleteObject(RealmObject object) {
object.deleteFromRealm();
}
我创建了 deleteObject 方法来调用 deleteFromRealm,因为 deleteFromRealm 是最终的,因此我无法模拟它。
我的期望是通过创建间谍来模拟对“deleteObject”ob Store 对象的调用
这是我的@Before方法
private Realm mockedRealm;
private Store store;
@Before
public void setUp() throws Exception {
mockedRealm = Mockito.mock(Realm.class);
store = new Store(mockedRealm);
store = PowerMockito.spy(store);
}
所以我创建了一个 Realm 的模拟对象并使用它来创建类 Store 的对象,然后从 store 的对象中创建一个间谍并将其分配回 store 对象本身。
以下是 removeFromFavourite 的测试方法
@Test
public void removeFromFavourite() throws Exception {
Quote quot = new Quote();
quot.setId(1);
RealmQuery<QuoteRealMObject> query = Mockito.mock(RealmQuery.class);
RealmQuery<QuoteRealMObject> filteredQuery = Mockito.mock(RealmQuery.class);
Mockito.when(mockedRealm.where(QuoteRealMObject.class)).thenReturn(query);
Mockito.when(query.equalTo(QuoteRealMObject.ID, 1)).thenReturn(filteredQuery);
QuoteRealMObject mockedObject = Mockito.mock(QuoteRealMObject.class);
Mockito.when(filteredQuery.findFirst()).thenReturn(mockedObject);
PowerMockito.doNothing().when(store, "deleteObject", mockedObject);
store.removeFromFavourite(quot);
}
这里的行PowerMockito.doNothing().when(store, "deleteObject", mockedObject);本身正在调用真正的私有方法“deleteObject”,我得到未完成的模拟异常
拉丁的传说
九州编程
犯罪嫌疑人X
相关分类