mockito icon indicating copy to clipboard operation
mockito copied to clipboard

verifyNoMoreInteractions shouldn't error out on Mock of Function

Open hopeman15 opened this issue 5 years ago • 1 comments

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 🚀

hopeman15 avatar Sep 10 '20 11:09 hopeman15

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.

srawlins avatar Mar 09 '21 17:03 srawlins