class MockView extends Mock implements ContactListViewContract {
@override
void onLoadContactsComplete(List<Contact> items) {
}
@override
void onLoadContactsError() {}
}
void main() {
test('ContactListPresenter test', () {
Injector.configure(Flavor.MOCK);
MockView view = new MockView();
ContactListPresenter presenter = new ContactListPresenter(view);
presenter.loadContacts();
verify(view.onLoadContactsComplete).called(1);
});
}
我希望确保当从代码中调用 presenter.loadContacts()
时,验证也会调用 view.onLoadContactsComplete
,但是出现错误:
有没有可能使用Mockito解决这个问题?在非mockito对象上使用
更新:
abstract class ContactListViewContract {
void onLoadContactsComplete(List<Contact> items);
void onLoadContactsError();
}
这里调用了onLoadContactsComplete
方法。
class ContactListPresenter {
ContactListViewContract _view;
ContactRepository _repository;
ContactListPresenter(this._view){
_repository = new Injector().contactRepository;
}
void loadContacts(){
assert(_view != null);
_repository.fetch()
.then((contacts) {
print(contacts);
_view.onLoadContactsComplete(contacts); // here the onLoadContactsComplete method is called
}).catchError((onError) {
print(onError);
_view.onLoadContactsError();
});
}
}
模拟仓库。获取模拟数据。
class MockContactRepository implements ContactRepository{
Future<List<Contact>> fetch(){
return new Future.value(kContacts);
}
}
verify(view.onLoadContactsComplete(kContacts)).called(1);
但是得到了相同的错误:Used on a non-mockito object
. 方法 onLoadContactsComplete 被100%调用。 - Gustik在非Mockito对象上使用
的错误,因为模拟视图实现了抽象类ContactListViewContract
。我创建了一个新类来实现ContactListViewContract
并已经对其进行了模拟,并尝试了您提供的异步选项 - 一切都正常工作!谢谢! - GustikuntilCalled(view.onLoadContactsComplete(typed(any)))
成功了,那么verify(view.onLoadContactsComplete(typed(any))).called(1)
不就没用了吗?它只是再次检查该方法是否被调用。 - Little Monkey