Mocking a Dart - How do I verify that a function passed as a parameter has been called?

Admittedly, this is a bit of a weird test case, but it is a problem that I have run into. I have a class that takes a function as a parameter in the constructor. I would like to know if the function that was passed was called. Here is an example:

class TestClassMock extends Mock implements RealClass {
  RealClass _real;

  TestClassMock() {
    _real = new RealClass();

    when(callsTo("myNamedFunction")).alwaysCall(_real.myNamedFunction);
  }
}

class RealClass {
  String _name = "RealClass";
  Function myNamedFunction;

  RealClass() {
    myNamedFunction = _theNamedFunction;
  }

  String _theNamedFunction() {
    return _name;
  }
}

class ClassThatCallsRealClass {
  ClassThatCallsRealClass(Function func) {
    func();
  }
}

//The test
TestClassMock testClassMock = new TestClassMock();
ClassThatCallsRealClass caller = new ClassThatCallsRealClass(testClassMock.myNamedFunction);  
testClassMock.getLogs(callsTo("myNamedFunction")).verify(happenedOnce);

, , ClassThatCallsRealClass . ( RealClass).myNamedFunction, , , _theNamedFunction RealClass. , RealClass myNamedFunction RealClass myNamedFunction, , , . , , .

?

0
2

Dart Function, , Function ClassThatCallsRealClass. Function call(), .

, , ( @KWalrath ).

, , , mocks, . , ClassThatCallsRealClass Function. verify(happenedOnce) call() .

, :

class MockFunction extends Mock {
  call(int a, int b) => a + b;
}

var mock = new MockFunction();
mock(1,2); //returns 3

, call . mock ClassThatCallsRealClass.

+2

:

library x;

import "package:unittest/unittest.dart";
import "package:unittest/mock.dart";

class TestClassMock extends Mock implements RealClass {
  RealClass _real;

  TestClassMock() {
    _real = new RealClass();

    when(callsTo("myNamedFunction")).alwaysCall(_real.myNamedFunction);
  }
}

class RealClass {
  String _name = "RealClass";
  Function myNamedFunction;

  RealClass() {
    myNamedFunction = _theNamedFunction;
  }

  String _theNamedFunction() {
    return _name;
  }
}

class ClassThatCallsRealClass {
  ClassThatCallsRealClass(Function func) {
    func();
  }
}

class MyFunc implements Function {

  Function func;
  String functionName;

  MyFunc(this.func, this.functionName);

  call() {
    var inv = new MyInvocation(functionName);
    func(inv);
  }
}

main(List<String> args) {
  test('xx', () {
    //The test
    TestClassMock testClassMock = new TestClassMock();
    ClassThatCallsRealClass caller = new ClassThatCallsRealClass(new MyFunc(testClassMock.noSuchMethod, "myNamedFunction"));  
    testClassMock.getLogs(callsTo("myNamedFunction")).verify(happenedOnce);
  });
}

class MyInvocation extends Invocation {
  final String f;
  MyInvocation(this.f); 

  bool get isGetter => false;

  bool get isMethod => true;

  bool get isSetter => false;

  Symbol get memberName => new Symbol(f);

  Map<Symbol, dynamic> get namedArguments => {};

  List get positionalArguments => [];
}

testClassMock.myNamedFunction null, noSuchMethod , Invocation. Invocation , . MyFunc - , . MyFunc , .

+1

Source: https://habr.com/ru/post/1542448/


All Articles