mockito
mockito copied to clipboard
mockito:mockBuilder generator fail using MockSpec custom superclass
Mockito generator fail using a custom superclass that extends MockSpec inside GenerateNiceMocks annotation.
Command: dart run build_runner build
Error:
[SEVERE] mockito:mockBuilder on test/mockito_super_test.dart:
Null check operator used on a null value
The problem is related to _mockTargetFromMockSpec
method inside lib/src/builder.dart file, because of superclass contains values inside (super)
field.
E.g.:
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'mockito_super_test.mocks.dart';
class ExampleMockSpec<T> extends MockSpec<T> {
const ExampleMockSpec() : super();
}
class ExampleService {
String testMethod() {
return "example";
}
}
@GenerateNiceMocks([ExampleMockSpec<ExampleService>()])
void main() {
test('exampleTest', () {
const mockValue = "mockValue";
final mock = MockExampleService();
when(mock.testMethod()).thenReturn(mockValue);
expect(mock.testMethod(), mockValue);
});
}
Uh, I feel like the right thing to do here is just to make MockSpec
class final
. Why would anyone want to subclass it?
I need to extend MockSpec
to use a default fallbackGenerators
for every classes.
EG:
class GetxMockSpec<T> extends MockSpec<T> {
const GetxMockSpec() : super(
fallbackGenerators: const {
#onStart: fallbackGenerator,
}
);
}
Could be a wrapper function instead.
MockSpec<T> getxMockSpec<T>() => MockSpec<T>(fallbackGenerators: {#onStart: generator});
(and I really hope we'll be able to get rid of fallback generators in the next major version).
Can the wrapper function be used in an annotation?
Wrapper function can't be used inside annotation:
Methods can't be invoked in constant expressions.