Gus*_*tik 6 unit-testing mockito dart flutter
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);
});
}
Run Code Online (Sandbox Code Playgroud)
我想确保presenter.loadContacts()从代码中调用when ,然后view.onLoadContactsComplete也调用verify ,但出现错误:
用于非模拟对象
有没有可能用 Mockito 做到这一点?
更新:
abstract class ContactListViewContract {
void onLoadContactsComplete(List<Contact> items);
void onLoadContactsError();
}
Run Code Online (Sandbox Code Playgroud)
这里的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();
});
}
}
Run Code Online (Sandbox Code Playgroud)
模拟存储库。获取模拟数据。
class MockContactRepository implements ContactRepository{
Future<List<Contact>> fetch(){
return new Future.value(kContacts);
}
}
Run Code Online (Sandbox Code Playgroud)
调用verify方法时,您需要调用模拟上的实际方法
尝试
test('ContactListPresenter test', () async {
Injector.configure(Flavor.MOCK);
MockView view = new MockView();
ContactListPresenter presenter = new ContactListPresenter(view);
presenter.loadContacts();
await untilCalled(view.onLoadContactsComplete(typed(any)));
//completes when view.onLoadContactsComplete(any) is called
verify(view.onLoadContactsComplete(typed(any))).called(1);
});
Run Code Online (Sandbox Code Playgroud)
如果该方法未调用一次,则测试将失败。
| 归档时间: |
|
| 查看次数: |
5774 次 |
| 最近记录: |