flutter - getter 'isEmpty'在null上被调用

标签 flutter dart flutter-test

我正在尝试对功能进行单元测试。这是生产代码:

    if (response.statusCode == 200) {
      final jsonResponse = json.decode(response.body);
      _responseRestaurantsModel =
          ResponseRestaurantsModel.fromJson(jsonResponse);
      if (_responseRestaurantsModel.documents.isEmpty)
        throw NoResultFoundException();
      return _responseRestaurantsModel;
    } else {
      throw ServerException();
    }
这里_responseRestaurantsModel.documentsList,如果它为空,则抛出异常。
这是测试代码:
class MockResponseRestaurantModel extends Mock implements ResponseRestaurantsModel {}

  setUp(() {
    mockHttpClient = MockHttpClient();
    dataSource = RestaurantRemoteDataSourceImpl(mockHttpClient);
    tResponseRestaurantModel = MockResponseRestaurantModel();
  });

    test(
      'should throw NoResultFoundException when the list is empty',
      () async {
        // arrange
        when(tResponseRestaurantModel.documents.isEmpty).thenReturn(null);

        // act
        final call = dataSource.getRestaurants;
        // assert
        expect(
          () => call(params....), throwsA(TypeMatcher<NoResultFoundException>()),
        );
      },
    );
但是测试失败,显示错误:NoSuchMethodError:在空调用getter'isEmpty'。 这怎么了?
class ResponseRestaurantsModel {
  List<RestaurantModel> documents;
  MetaRestaurantsModel meta;

  ResponseRestaurantsModel({@required this.documents, @required this.meta});

  ResponseRestaurantsModel.fromJson(Map<String, dynamic> json) {
    if (json['documents'] != null) {
      documents = new List<RestaurantModel>();
      json['documents'].forEach((v) {
        documents.add(new RestaurantModel.fromJson(v));
      });
    }
    meta = json['meta'] != null
        ? new MetaRestaurantsModel.fromJson(json['meta'])
        : null;
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    if (this.documents != null) {
      data['documents'] = this.documents.map((v) => v.toJson()).toList();
    }
    if (this.meta != null) {
      data['meta'] = this.meta.toJson();
    }
    return data;
  }
}
型号类别:

最佳答案

tResponseRestaurantModel.documents为空,因此您必须将此属性添加到MockResponseRestaurantModel

关于flutter - getter 'isEmpty'在null上被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63115625/

相关文章:

user-interface - 容器的 Flutter onTap 方法

dart - 如何在 Flutter 中测试 Cupertino Picker

flutter - analysis_options.yaml找不到包含的文件

flutter - 如何在 futureBuilder 中使用 'toIso8601String'

android - 如何在flutter中根据不同的屏幕尺寸对齐堆栈内的小部件

firebase - Flutter-Dart:如何从函数正确返回Text小部件

android - Flutter 中的 SharedPreferences 错误

flutter - 我怎样才能对这种方法进行小部件测试?

flutter - 如何找出测试运行缓慢的原因?

gridview - 如何在 Flutter 的 GridView 中为 Widget 设置自定义高度?