Mockito 模拟函数返回 Null

问题描述 投票:0回答:1

我陷入了使用 Mockito 进行测试的困境。我正在尝试在 Flutter 教程中实现 Clean Architect 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);
。谁能告诉我这里出了什么问题吗?

flutter unit-testing dart mockito tdd
1个回答
3
投票

您正在关注一些早于 Dart null-safety 的 Mockito 示例。

有了空安全,您不应该自己定义 MockRandomWordsRepository 类(或其他模拟类)。相反,您需要使用

@GenerateMocks([RandomWordsRepository])
@GenerateNiceMocks([RandomWordsRepository])
生成
模拟类,然后运行
dart run build_runner build
。然后,您需要添加适当的
import
行才能使用生成的文件。
确保您严格遵循 

Mockito

README

 的说明。

© www.soinside.com 2019 - 2024. All rights reserved.