無可否認,這是一個奇怪的測試案例,但這是我遇到的一個問題。我有一個在其構造函數中將函數作爲參數的類。我想知道是否傳入的函數被調用。這裏有一個例子: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 –