dart-lang / mockito

Mockito-inspired mock library for Dart
https://pub.dev/packages/mockito
Apache License 2.0
634 stars 162 forks source link

verifyNoMoreInteractions shouldn't error out on Mock of Function #277

Open hopeman15 opened 4 years ago

hopeman15 commented 4 years ago

First off, thanks for dart mockito 🙏

I've been using mockito for a while and haven't run into any issues until now. I have the following test checking if the function of my flutter widget was called, which works as expected. However while calling verifyNoMoreInteractions(testFunction); I always get the following error:

Invalid argument(s): verifyNoMoreInteractions must only be given a Mock object

As far as I can see the method is mocked, even the verify(testFunction.call(50)).called(2); works correctly. Any tips and or help would be greatly appreciated 👍

class MockFunction extends Mock implements Function {
  void call(double param);
}

void main() {
  void Function(double) testFunction;

  setUp(() {
    testFunction = MockFunction();
    when(testFunction.call(any)).thenAnswer((_) {});
  });

  tearDown(() {
    verifyNoMoreInteractions(testFunction);
  });

  testWidgets('test default slider', (WidgetTester tester) async {
    const value = 15;

    await tester.pumpWidget(
      MaterialApp(
        home: MyCustomSlider(
          onChanged: testFunction,
          value: value,
        ),
      ),
    );

    // test function was called
    await tester.drag(find.byType(Slider), Offset(0.0, 0.0));
    await tester.pumpAndSettle();

    // onChange called twice, by tap and slide
    verify(testFunction.call(50)).called(2);
  });
}

Thanks for your time and keep up the good work 🚀

srawlins commented 3 years ago

Generally, Mockito is not designed to work on top-level functions. I'd be surprised if anything really works in the Mockito API given a class MockFunction extends Mock implements Function.