Mockito 模拟函数返回 Null
Mockito mocked function returned Null
我正在尝试学习 Flutter,但一直坚持使用 Mockito 进行测试。我正在尝试将 Clean Architect 实施到 Flutter 教程 https://docs.flutter.dev/get-started/codelab。我制作了一个名为 GetRandomWords
的用例和一个名为 RandomWordsRepository
的接口适配器,如下所示:
abstract class RandomWordsRepository {
String get();
}
abstract class GetRandomWords {
String randomWords();
}
class GetRandomWordsImpl implements GetRandomWords {
final RandomWordsRepository repository;
GetRandomWordsImpl(this.repository);
@override
String randomWords() {
return repository.get();
}
}
我做了一个这样的测试用例:
import 'package:mockito/mockito.dart';
import 'package:tutorial/domain/interfaces/random_words_repository.dart';
import 'package:tutorial/domain/use_cases/get_random_words.dart';
class MockRandomWordsRepository extends Mock implements RandomWordsRepository {
}
@GenerateMocks([RandomWordsRepository])
void main() {
setUp(() {});
test("Should get random words from repository", () async {
final expectedRandomWords = "test_random_words";
final mockRepository = MockRandomWordsRepository();
final useCase = GetRandomWordsImpl(mockRepository);
when(mockRepository.get()).thenReturn(expectedRandomWords);
expect(useCase.randomWords(), expectedRandomWords);
verify(mockRepository.get());
});
}
但它返回了这个错误:type 'Null' is not a subtype of type 'String'
行 when(mockRepository.get()).thenReturn(expectedRandomWords);
。谁能告诉我这里出了什么问题?
谢谢。
@GenerateMocks([RandomWordsRepository])
将为您创建 MockRandomWordsRepository
class。你不应该自己定义它。您还需要 运行 dart run build_runner build
来生成模拟,并且需要添加适当的 import
行来使用生成的文件。
我正在尝试学习 Flutter,但一直坚持使用 Mockito 进行测试。我正在尝试将 Clean Architect 实施到 Flutter 教程 https://docs.flutter.dev/get-started/codelab。我制作了一个名为 GetRandomWords
的用例和一个名为 RandomWordsRepository
的接口适配器,如下所示:
abstract class RandomWordsRepository {
String get();
}
abstract class GetRandomWords {
String randomWords();
}
class GetRandomWordsImpl implements GetRandomWords {
final RandomWordsRepository repository;
GetRandomWordsImpl(this.repository);
@override
String randomWords() {
return repository.get();
}
}
我做了一个这样的测试用例:
import 'package:mockito/mockito.dart';
import 'package:tutorial/domain/interfaces/random_words_repository.dart';
import 'package:tutorial/domain/use_cases/get_random_words.dart';
class MockRandomWordsRepository extends Mock implements RandomWordsRepository {
}
@GenerateMocks([RandomWordsRepository])
void main() {
setUp(() {});
test("Should get random words from repository", () async {
final expectedRandomWords = "test_random_words";
final mockRepository = MockRandomWordsRepository();
final useCase = GetRandomWordsImpl(mockRepository);
when(mockRepository.get()).thenReturn(expectedRandomWords);
expect(useCase.randomWords(), expectedRandomWords);
verify(mockRepository.get());
});
}
但它返回了这个错误:type 'Null' is not a subtype of type 'String'
行 when(mockRepository.get()).thenReturn(expectedRandomWords);
。谁能告诉我这里出了什么问题?
谢谢。
@GenerateMocks([RandomWordsRepository])
将为您创建 MockRandomWordsRepository
class。你不应该自己定义它。您还需要 运行 dart run build_runner build
来生成模拟,并且需要添加适当的 import
行来使用生成的文件。