颤动测试中的非空变量

ale*_*zak 5 dart flutter 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
  });
}


Run Code Online (Sandbox Code Playgroud)

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

mig*_*uno 4

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

例子:

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

  print(foo);
}
Run Code Online (Sandbox Code Playgroud)

在你的情况下它将是

late MockNumberTriviaRepository mockNumberTriviaRepository;
Run Code Online (Sandbox Code Playgroud)