Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Dart中测试代码生成时出错:生成器未能写入资源_Dart_Flutter - Fatal编程技术网

在Dart中测试代码生成时出错:生成器未能写入资源

在Dart中测试代码生成时出错:生成器未能写入资源,dart,flutter,Dart,Flutter,我已经创建了一个Dart(Dart v2)代码生成器来检测Cooper类型的注释 生成器如下所示: class CooperGenerator extends GeneratorForAnnotation<Cooper> { @override Future<String> generateForAnnotatedElement( Element element, ConstantReader annotation, BuildStep buildSt

我已经创建了一个Dart(Dart v2)代码生成器来检测Cooper类型的注释

生成器如下所示:

class CooperGenerator extends GeneratorForAnnotation<Cooper> {
  @override
  Future<String> generateForAnnotatedElement(
      Element element, ConstantReader annotation, BuildStep buildStep) async {
    final name = annotation?.peek("implementationClassName")?.stringValue ?? "CooperApi";
    return "class $name {}";
  }
}
import 'package:build/build.dart';
import 'package:test/test.dart';
import 'package:build_test/build_test.dart';
import 'package:source_gen/source_gen.dart';
import 'package:cooper_generator/cooper_generator.dart';

void main() {
  group('CooperGenerator', () {
    test('generates implementation for classes annotated with @Cooper',
        () async {
      final builder = PartBuilder([CooperGenerator()], '.g.dart');
      await testBuilder(builder, _inputs, outputs: _output);
    });
  });
}

final _output = {
  "jorge|lib/coop.g.dart": '''
// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'coop.dart';

// **************************************************************************
// CooperGenerator
// **************************************************************************

class CooperImplementation {}
          '''
};

final _inputs = <String, String>{
  'cooper|lib/cooper.dart': _cooperSource,
  'jorge|lib/coop.dart': _classToGenerate,
};

const String _classToGenerate = r'''
    import 'package:cooper/cooper.dart';
    @Cooper("CooperImplementation")
    abstract class CooperContract {}
''';

const String _cooperSource = r'''
class Cooper {
  final String implementationClassName;

  const Cooper(this.implementationClassName);
}
''';
类CooperGenerator扩展GeneratorForAnnotation{
@凌驾
未来生成ForNotatedElement(
元素元素,ConstantTreader注释,BuildStep(BuildStep)异步{
最终名称=注释?.peek(“implementationClassName”)?.stringValue???“CooperApi”;
返回“class$name{}”;
}
}
我正在编写单元测试,以验证我的生成器是否按预期工作。看起来像这样:

class CooperGenerator extends GeneratorForAnnotation<Cooper> {
  @override
  Future<String> generateForAnnotatedElement(
      Element element, ConstantReader annotation, BuildStep buildStep) async {
    final name = annotation?.peek("implementationClassName")?.stringValue ?? "CooperApi";
    return "class $name {}";
  }
}
import 'package:build/build.dart';
import 'package:test/test.dart';
import 'package:build_test/build_test.dart';
import 'package:source_gen/source_gen.dart';
import 'package:cooper_generator/cooper_generator.dart';

void main() {
  group('CooperGenerator', () {
    test('generates implementation for classes annotated with @Cooper',
        () async {
      final builder = PartBuilder([CooperGenerator()], '.g.dart');
      await testBuilder(builder, _inputs, outputs: _output);
    });
  });
}

final _output = {
  "jorge|lib/coop.g.dart": '''
// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'coop.dart';

// **************************************************************************
// CooperGenerator
// **************************************************************************

class CooperImplementation {}
          '''
};

final _inputs = <String, String>{
  'cooper|lib/cooper.dart': _cooperSource,
  'jorge|lib/coop.dart': _classToGenerate,
};

const String _classToGenerate = r'''
    import 'package:cooper/cooper.dart';
    @Cooper("CooperImplementation")
    abstract class CooperContract {}
''';

const String _cooperSource = r'''
class Cooper {
  final String implementationClassName;

  const Cooper(this.implementationClassName);
}
''';
导入“包:build/build.dart”; 导入“包:test/test.dart”; 导入“包:build_test/build_test.dart”; 导入“包:源代码/源代码.省道”; 导入“包:库珀_生成器/cooper_生成器.dart”; void main(){ 组('CooperGenerator',(){ test('为带@Cooper'注释的类生成实现, ()异步{ 最终生成器=零件生成器([CooperGenerator()],“.g.dart”); 等待testBuilder(生成器,_输入,输出:_输出); }); }); } 最终输出={ “豪尔赫| lib/coop.g.dart”:” //生成的代码-不要手动修改 “鸡笼飞镖”的一部分; // ************************************************************************** //库珀发生器 // ************************************************************************** 类协同实现{} ''' }; 最终输入={ “cooper | lib/cooper.dart”:_cooperSource, “jorge | lib/coop.dart”:“类生成”, }; 常量字符串_classToGenerate=r'' 导入“包:cooper/cooper.dart”; @库珀(“合作实施”) 抽象类CooperContract{} '''; 常量字符串_cooperSource=r'' 库珀班{ 最终字符串实现classname; const Cooper(this.implementationClassName); } '''; 代码运行得非常好,它生成了我期望的代码。但是,在运行单元测试时,我遇到了以下错误,我无法理解原因:

ERROR: Expected: contains AssetId:<jorge|lib/coop.g.dart>
Actual: ?:[]
Builder failed to write asset jorge|lib/coop.g.dart

package:test                                    expect
package:build_test/src/test_builder.dart 49:7   checkOutputs.<fn>
dart:collection                                 __InternalLinkedHashMap&_HashVMBase&MapMixin&_LinkedHashMapMixin.forEach
package:build_test/src/test_builder.dart 41:13  checkOutputs
package:build_test/src/test_builder.dart 140:3  testBuilder
===== asynchronous gap ===========================
dart:async                                      _AsyncAwaitCompleter.completeError
package:build_test/src/test_builder.dart        testBuilder
===== asynchronous gap ===========================
dart:async                                      _asyncThenWrapperHelper
package:build_test/src/test_builder.dart        testBuilder
test/generator_test.dart 12:13                  main.<fn>.<fn>
错误:应为:包含AssetId:
实际:?:[]
生成器未能写入资产jorge | lib/coop.g.dart
包:测试预期
包:build\u test/src/test\u builder.dart 49:7检查输出。
dart:collection\u InternalLinkedHashMap和\u HashVMBase&MapMixin和\u LinkedHashMapMixin.forEach
包:build\u test/src/test\u builder.dart 41:13检查输出
包:build\u test/src/test\u builder.dart 140:3 testBuilder
======异步间隙===========================
dart:async\u AsyncAwaitCompleter.completeError
包:build\u test/src/test\u builder.dart testBuilder
======异步间隙===========================
dart:async\u asyncThenWrapperHelper
包:build\u test/src/test\u builder.dart testBuilder
试验/发电机试验。dart 12:13主。。
有人知道为什么这会给我这个错误吗