颤振测试中的非空变量
Posted
技术标签:
【中文标题】颤振测试中的非空变量【英文标题】:non-null variable in flutter test 【发布时间】:2021-09-08 21:01:24 【问题描述】:大约一年前我在学习颤振,现在休息后回来,但我反驳了一个问题,这可能很简单,但我真的不明白。
我正在关注 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】:编译器无法真正理解您稍后会初始化该值。要告诉它您承诺在使用变量之前这样做,请在类型前添加 late
关键字。
例子:
// compiles successfully and prints 'abc'
void main()
late String foo;
()
foo = 'abc';
();
print(foo);
你的情况是
late MockNumberTriviaRepository mockNumberTriviaRepository;
【讨论】:
非常感谢!【参考方案2】:在 void main 的顶部将 mockNumberTriviaRepository 初始化为
MockNumberTriviaRepository mockNumberTriviaRepository= MockNumberTriviaRepository();
class MockNumberTriviaRepository extends Mock
implements NumberTriviaRepository
void main()
GetConcreteNumberTrivia usecase;
MockNumberTriviaRepository 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
);
或使用late关键字
late MockNumberTriviaRepository mockNumberTriviaRepository;
【讨论】:
以上是关于颤振测试中的非空变量的主要内容,如果未能解决你的问题,请参考以下文章