颤振测试中的非空变量

时间:2021-06-25 13:05:10

标签: flutter dart flutter-test dart-null-safety

大约一年前我正在学习颤振,现在休息后我回来了,但我解决了一个问题,这可能很简单,但我真的不明白。

我正在学习 Flutter Clean Architecture 的教程,当我编写我的第一个测试时,我有一个错误说 “不可为空的局部变量 'mockNumberTriviaRepository' 必须在使用前赋值。” 我不知道怎么写才能成为正确的代码。

我的代码如下:

class MockNumberTriviaRepository extends Mock
    implements NumberTriviaRepository {}

void main() {
  GetConcreteNumberTrivia usecase;
  MockNumberTriviaRepository mockNumberTriviaRepository;

  setUp(() {
    MockNumberTriviaRepository mockNumberTriviaRepository = MockNumberTriviaRepository();
    usecase = GetConcreteNumberTrivia(mockNumberTriviaRepository);
  });

  final tNumber = 1;
  final tNumberTrivia = NumberTrivia(number: 1, text: 'test');
  test('schould get trivia for the number from the repository', () async {
    // arrange
    when(**mockNumberTriviaRepository**.getConcreteNumberTrivia(1)).thenAnswer((_) async => Right(tNumberTrivia));
    // act

    // assert
  });
}


错误出现在测试函数中的when方法之后的** ** this标志之间

1 个答案:

答案 0 :(得分:1)

编译器无法真正理解您稍后初始化该值。要告诉它您承诺在使用变量之前这样做,请在类型前添加 late 关键字。

示例:

// compiles successfully and prints 'abc'
void main() {
  late String foo;
  
  (){
    foo = 'abc';
  }();

  print(foo);
}

在你的情况下是

late MockNumberTriviaRepository mockNumberTriviaRepository;