【问题标题】:Mockito mocked function returned NullMockito 模拟函数返回 Null
【发布时间】:2021-12-29 07:54:57
【问题描述】:

我正在尝试学习 Flutter,但一直坚持使用 Mockito 进行测试。我正在尝试在 Flutter 教程 https://docs.flutter.dev/get-started/codelab 中实现 Clean Architect。我制作了一个名为 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】:

    @GenerateMocks([RandomWordsRepository]) 将为您创建一个 MockRandomWordsRepository 类。你不应该自己定义它。您还需要运行dart run build_runner build 来生成模拟,并且需要添加适当的import 行来使用生成的文件。

    确保您准确地关注the instructions from the Mockito README

    【讨论】:

    • 你是对的。原因是因为我没有做dart run build_runner build。谢谢。
    猜你喜欢
    • 2019-04-05
    • 2020-03-13
    • 2020-01-21
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多