4
我有一個飛鏢類,我想單元測試,我想嘲笑到鏢電話:HTML庫,以確保如期我的類行爲。我看過的文章Mocking with Dart但它簡化版,提到如何嘲笑HTML庫。有人有建議嗎?飛鏢嘲諷HTML庫
我有一個飛鏢類,我想單元測試,我想嘲笑到鏢電話:HTML庫,以確保如期我的類行爲。我看過的文章Mocking with Dart但它簡化版,提到如何嘲笑HTML庫。有人有建議嗎?飛鏢嘲諷HTML庫
這並不容易,因爲dart:html庫不是無頭的(即它需要瀏覽器)。我通常會盡量按照MVP的設計模式,以確保與DOM的交互的代碼僅在我看來類和所有BIZ邏輯是在主持人。這樣我就可以單元測試演示者而無需訪問DOM API。下面是一個小例子。
// view interface has no reference to dart:html
abstract class View {
hello();
}
// view impl uses dart:html but hands of all logic to the presenter
class ViewImpl implements View {
View(this._presenter) {
var link = new Element.html("<a href="">a link</a>");
link.on.click.add(_presenter.onClick());
body.nodes.add(link);
}
hello() {
body.nodes.add(new Element.html("<p>Hello from presenter</p>");
}
Presenter _presenter;
}
// presenter acts on the View interface and can therefor be tested with a mock.
class Presenter {
Presenter(this._view);
onClick() => _view.hello();
View _view;
}
dart:html也包含非UI類,例如localStorage和sessionStorage,它們是客戶端持久性的基礎。我想確保我的數據存儲和加載例程正常工作,並且不會退化。我想嘲笑存儲類,但不能beause,嘲笑它,我必須導入鏢:在我的單元測試文件的HTML。但是Dart的酒吧系統不會允許這樣做。相反,它提供了錯誤:「不知道怎麼裝‘鏢:HTML’」。有沒有一種方法來模擬從DART類:HTML不導入鏢:HTML(在單元測試)? – devdanke