如何验证调用或不调用方法
How to verify to call or not to call a method
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
是否也被调用但出现错误:
Used on a non-mockito object
有没有可能用 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
方法时,您需要调用 mock
上的实际方法
尝试
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);
});
如果该方法未被调用一次,测试将失败。
Mockito 为两者提供本机支持
要测试你的方法至少被调用一次你可以使用
verify(<your-method-with-expected-params>)
这将验证您的方法是否已调用(无论调用了多少次)。要验证它是否已被调用特定次数,您可以将其与 .called(<number-of-calls-expected>)
链接起来
要测试您的方法没有被调用,您应该使用 verifyNever(<your-method-with-expected-params>)
这将验证您的方法没有被调用
确保传递给 verify
和 verifyNever
的方法是 Mockito 模拟的方法。
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
是否也被调用但出现错误:
Used on a non-mockito object
有没有可能用 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
方法时,您需要调用 mock
尝试
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);
});
如果该方法未被调用一次,测试将失败。
Mockito 为两者提供本机支持
要测试你的方法至少被调用一次你可以使用
链接起来verify(<your-method-with-expected-params>)
这将验证您的方法是否已调用(无论调用了多少次)。要验证它是否已被调用特定次数,您可以将其与.called(<number-of-calls-expected>)
要测试您的方法没有被调用,您应该使用
verifyNever(<your-method-with-expected-params>)
这将验证您的方法没有被调用
确保传递给 verify
和 verifyNever
的方法是 Mockito 模拟的方法。