Comments (6)
Sorry but we specifically changed this because of Strong mode. When you return a Type that is not the value you are specifying at the return type you are specifically breaking the type contract. Null is fine because null is all types.
from mockito.
@TedSander I think you're mixing up the issue. It's about noSuchMethod returning null
, not any
returning null
.
from mockito.
@lestathc Doesn't this work? when(mockObj.foo).thenReturn(() { /* your stub */});
import 'package:test/test.dart';
import 'package:mockito/mockito.dart';
class HasFoo {
void foo() {
print('hey');
}
}
class MockHasFoo extends Mock implements HasFoo {}
willCallCallback(void callback()) {
callback();
}
void main() {
var mhf = new MockHasFoo();
test('hey', () {
var called = false;
when(mhf.foo).thenReturn(() {
called = true;
});
willCallCallback(mhf.foo);
expect(called, isTrue);
});
}
from mockito.
Sorry my mistake
from mockito.
Yes, that works, but it is similar like my last test in my full example. Ideally, I want to write it simply like:
var mhf = new MockHasFoo();
test('hey', () {
willCallCallback(mhf.foo);
verify(mhf.foo());
});
I have written a simple piece of code which may achieve it. But I am not sure whether it breaks strong mode (I even don't know whether strong mode works in dartpad).
@MirrorsUsed(symbols: 'foo, call')
import 'dart:mirrors';
class HasFoo {
void foo() {}
}
var _verificationInProgress = false;
get verify => _makeVerify();
_makeVerify() {
_verificationInProgress = true;
return (FunctionGetterStub stub) {
_verificationInProgress = false;
stub.verify();
};
}
class FunctionGetterStub {
bool _verified = false;
bool _invoked = false;
invoke(Invocation inv) {
_invoked = true;
return '123';
}
verify() {
if (_verified) throw 'vefiied';
if (!_invoked) throw 'not invoked';
_verified = true;
}
noSuchMethod(Invocation inv) => invoke(inv);
}
class MockHasFoo implements HasFoo {
Map<Symbol, FunctionGetterStub> _funcToStub = {};
FunctionGetterStub _createOrGetStub(Symbol symbol) {
var stub = _funcToStub[symbol];
if (stub == null) {
stub = new FunctionGetterStub();
_funcToStub[symbol] = stub;
}
return stub;
}
noSuchMethod(Invocation inv) {
var stub = _createOrGetStub(inv.memberName);
if (inv.isGetter /* and is getter for func */ || _verificationInProgress) {
return stub;
} else {
return stub.invoke(inv);
}
}
}
void test1() {
print('==== test 1 ====');
var mock = new MockHasFoo();
print('Getter: ${mock.foo}');
print('Function: ${mock.foo()}');
verify(mock.foo());
print('pass!');
}
void test2() {
print('==== test 2 ====');
willCallCallback(void callback()) {
callback();
}
var mock = new MockHasFoo();
willCallCallback(mock.foo);
verify(mock.foo());
print('pass!');
}
void main() {
test1();
test2();
}
But the first thing is to decide whether we need to do it.
Thanks
from mockito.
Unfortunately, In Dart 2 tear offs with noSuchMethod don't play well to allow this. See #107 for more info.
from mockito.
Related Issues (20)
- Generated Imports use Unescaped backslashes HOT 3
- Verify constructor HOT 1
- How to test retrofit services with mockito HOT 6
- Question: dockito in dev_dependies? HOT 1
- Error The included part 'mocks.dart' must have a part-of directive. HOT 1
- `verify` failing test but showing in "All calls" HOT 1
- mockito:mockBuilder generator fail using MockSpec custom superclass HOT 5
- How to mock Dio.interceptors.add? HOT 1
- Support for extension-type/inline-class HOT 3
- Why is build_runner is succeeding with 0 outputs? HOT 3
- Support for real executions on Mocking classes HOT 1
- Bad state: Cannot call `when` within a stub response HOT 7
- Cannot create Mock in Dart 3.x: type 'Null' is not a subtype of type 'IOSink' HOT 1
- 'Null' is not a subtype of type 'Future<bool>' HOT 3
- Mocking a class which is created at runtime HOT 1
- Breaking change or typo? HOT 2
- How are we supposed to use any with non null parameters? HOT 2
- Extension type with generic
- Cannot generate mocks for class with method with parameter with default value with a single quote HOT 6
- Dart 3.4.3: invocation_matcher.dart Error: The class 'DeepCollectionEquality' can't be extended outside of its library because it's a final class. HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from mockito.