미래를 반환하는 메소드를 정의하는 클래스가 있습니다. 미래에는 미래를 돌려주는 클래스 목록이 포함됩니다.다트 - 미래를 반환하는 메소드 모의 방법
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
}
}
같은 비트 내가이 날 생성자가 user.photos라고하는지 테스트 할 수이
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);
});
}
같은 단위 테스트를 작성하는 시도 본다() 메서드를 호출했지만 album.photos() 메서드가 호출되지는 않았습니다.
나는 미래를 조롱하는 것이 좋은 생각인지 모르겠다 - 모의 명단이 포함 된 '진짜'미래를 만드는 것이 낫지 않겠는가?
어떤 아이디어라도 도움이 될 것입니다.