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);
}
}
3条答案
按热度按时间6yjfywim1#
当调用
verify
方法时,您需要调用mock上的实际方法尝试
如果一次都没有呼叫方法,测试就会失败。
13z8s7eq2#
Mockito提供了对这两种类型的本机支持
1.要测试您的方法是否至少被调用过一次,您可以使用
verify(<your-method-with-expected-params>)
,这将验证您的方法是否被调用过(无论调用多少次)。要验证它是否被调用过特定的次数,您可以使用.called(<number-of-calls-expected>)
将其链接起来1.要测试方法是否未被调用,应使用
verifyNever(<your-method-with-expected-params>)
,这将验证方法是否未被调用请确保传递给
verify
和verifyNever
的方法是Mockito已Mocked的方法。gmxoilav3#
您可以使用从不和验证零交互