无可否认,这是一个奇怪的测试案例,但这是我遇到的一个问题。我有一个在其构造函数中将函数作为参数的类。我想知道是否传入的函数被调用。这里有一个例子: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();
}
}
//The test
TestClassMock testClassMock = new TestClassMock();
ClassThatCallsRealClass caller = new ClassThatCallsRealClass(testClassMock.myNamedFunction);
testClassMock.getLogs(callsTo("myNamedFunction")).verify(happenedOnce);
所以要解释一下,ClassThatCallsRealClass接受一个函数作为参数,并调用它。如果您要传入(实例实例类).myNamedFunction,则会反过来在RealClass上调用专用函数_theNamedFunction。但是,如果您尝试模拟RealClass并将所有调用从myNamedFunction重定向到RealClass myNamedFunction,则这似乎失败。我没有看到任何明确的方法来实现这个目标,但我认为这是可能的。
任何想法?
我不确定嘲笑函数实例的意思。我会怎么做呢? – mrand01
编辑与东西给你考虑。 – Vidya
第二段中的链接是一个非常古老的文章,因为它包含了一个过时的库,因此已被删除。也许看看mockito吧:https://pub.dartlang.org/packages/mockito –