Dart 如何模拟过程

2024-05-22

我如何去模拟一个过程(与函数相反,请参见here https://stackoverflow.com/questions/23925384/dart-mocking-a-function)

例如,给定以下 typedef 和过程,

typedef int Adder(int a, int b);

int useAdder(Adder adder) {
  return adder(1, 2);
}

如何编写一个模拟来测试 userAdder 过程是否调用了模拟函数?

这是我的尝试,但失败并显示以下消息测试失败:捕获空对象没有方法“调用”。

class MyMock extends Mock {
  MyMock(){
    when(callsTo('call')).alwaysCall(this.foo);
  }
  int foo(int a, int b) => a+b;
}

void main() {

  test("bb", () {
    var mockf = new MyMock();
    expect(useAdder( mockf.call), 3);
    mockf.getLogs(callsTo('call', 1, 2)).verify(happenedOnce);
  });
}

如果我改变

 expect(useAdder( mockf.call), 3);

to

 expect(useAdder( mockf.foo), 3);

方法调用没有出现在日志中


我的尝试

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

typedef int Adder(int a, int b);

int useAdder(Adder adder) {
  return adder(1, 2);
}

class MyMock extends Mock {
  MyMock(){
    when(callsTo('call')).alwaysCall(this.foo);
  }
  int foo(int a, int b) => a+b;

  int call(int a, int b) => super.call(a, b);

}

void main() {

  test("bb", () {
    var mockf = new MyMock();
    expect(useAdder(mockf as Adder), 3);
    mockf.getLogs(callsTo('call', 1, 2)).verify(happenedOnce);
  });
}

看来 call 方法必须实际存在才能使 MyMock 被接受为 Adder。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Dart 如何模拟过程 的相关文章

随机推荐