我一直试图让我的头围绕飞镖的模拟图书馆,但似乎我还没有得到它。
在我的库中,我有一个外部资源的HTTP请求,我想模拟它不依赖于外部资源。
我的库中的主要类看起来像这样:
SampleClass(String arg1, String arg2, [http.Client httpClient = null]) {
this._arg1 = arg1;
this._arg2 = arg2;
_httpClient = (httpClient == null) ? http.Request : httpClient;
}
所以我已准备好接收http.client作为参数的类,因为这是我想要模拟的。
所以在我创建的单元测试文件中:
class HttpClientMock extends Mock implements http.Client {
noSuchMethod(i) => super.noSuchMethod(i);
}
在我的单元测试中,我已经完成了:
var mockHttpClient = new HttpClientMock()
..when(callsTo('send')).alwaysReturn("this is a test");
我希望每当我从我的库中调用“send”时,它已经在我的单元测试中使用可选的“httpClient”进行了实例化,它将返回“这是一个测试”。我很确定我在这里失去了一些非常大的东西,但是我不能完全理解这一点。
任何帮助表示感谢。
答案 0 :(得分:3)
我不确定你错过了什么,因为你的例子适合我:
void main() {
test('bla', () {
var mockHttpClient = new HttpClientMock()
..when(callsTo('send')).alwaysReturn("this is a test");
http.Request req = new http.Request('POST', Uri.parse('http://www.google.com'));
var s = mockHttpClient.send(req);
print(s);
expect(mockHttpClient.send(req), equals('this is a test'));
});
}