1
我有一個類定義了返回Future的方法。未來包含了一個也會返回未來的課程列表。Dart - 如何模擬返回未來的方法
class User{
Future<List<Album>> albums(){
};
}
class Album{
Future<List<Photos>> photos(){
}
};
什麼是測試另一個類時嘲笑這些類的方法最好的方法是什麼?
我試圖測試的類看起來有點像
class Presenter {
Presenter(User user){
user.albums().then(_processAlbums);
}
_processAlbums(List<Album> albums) {
albums.forEach((album)=>album.photos.then(_processPhotos));
}
_processPhotos(List<Photo> photos) {
....stuff
}
}
我試着寫一個單元測試這樣
class MockUser extends Mock implements User{}
class MockAlbum extends Mock implements Album{}
class MockPhoto extends Mock implements Photo{}
class MockFutureList<T> extends Mock implements Future<T>{
MockFutureList(List<T> items){
when(callsTo("then")).thenReturn(items);
}
}
void main(){
test("constuctor should request the albums from the user ",(){
MockUser user = new MockUser();
MockAlbum album = new MockAlbum();
List<Album> listOfAlbums = [ album];
MockPhoto photo = new MockPhoto();
List<Album> listOfPhotos = [ album];
user.when(callsTo("albums")).thenReturn( new MockFutureList(listOfAlbums));
album.when(callsTo("photos")).thenReturn(new MockFutureList(listOfPhotos));
PicasaPhotoPresentor underTest = new PicasaPhotoPresentor(view, user);
user.getLogs(callsTo("albums")).verify(happenedOnce);
album.getLogs(callsTo("photos")).verify(happenedOnce);
});
}
這讓我測試構造方法調用了user.photos ()方法,但不是調用album.photos()方法。
我不確定嘲笑未來是個好主意 - 創建一個包含Mock列表的「真實」未來會不會更好?
任何想法都會非常有幫助!