小编Ovi*_*uru的帖子

单元测试 GetxController

我是 tdd 的初学者,所以如果这是一个愚蠢的问题,请原谅我。

我在单元测试 GetxControllers 时遇到困难。有谁知道这样做的简单方法?每当我这样做时,我都会收到错误,因为 Get 正在调用 onStart 并且它不喜欢 Mockito 给出的结果。我尝试使用 Mockito 5.0.1 的自动生成代码以及旧语法,类 MockController 扩展 Mock 实现 Controller{},以及扩展 Fake。

自动生成的代码有构建错误,因为 Mockito 试图使用 _InternalFinalCallback,但它没有被导入,因为它是私有的。我尝试将那部分代码复制粘贴到我生成的文件中(并关闭 pub build watch)但首先这是一个短期解决方案,它有自己的问题,第二它仍然不起作用,因为 onStart 和 onDelete 函数现在告诉我它们不是有效的覆盖。

另外,我可以看到 get_test 包,但它的文档基本上是 0,在示例中,控制器只是直接使用——从来没有模拟控制器。

我尝试设置 Get.testMode = true; 但同样,这似乎没有任何作用。虽然我在文档中找到了该属性,但我没有找到如何正确使用它。

任何帮助,将不胜感激,

这是我的代码,但问题似乎出在 GetxControllers 上,所以我认为它没有太大关系:

class FakeAuthController extends Fake implements AuthController {}

@GenerateMocks([AuthController])
void main() {
  TestWidgetsFlutterBinding.ensureInitialized();
  late MockAuthController mockAuthController;
  late FakeAuthController fakeAuthController;
  late SessionController sessionController;

  setUp(() {
    Get.testMode = true;
    mockAuthController = MockAuthController();
    fakeAuthController = FakeAuthController();
    Get.put<AuthController>(mockAuthController);

    sessionController = …
Run Code Online (Sandbox Code Playgroud)

unit-testing flutter getx flutter-getx

9
推荐指数
1
解决办法
1104
查看次数

如何在 repo 中测试/模拟 Hive (Flutter) 打开框逻辑?

对不起,如果这似乎是一个愚蠢的问题。我正在按照 Rob Martin 的指示学习简洁的架构,并且在编写其中一个测试时遇到了一些麻烦。

我在 Hive 存储库中编写了几个函数。这是代码

import 'package:hive/hive.dart';
import 'package:movie_browser/features/SearchMovie/domain/entities/movie_detailed_entity.dart';

abstract class HiveMovieSearchRepoAbstract {
  Future<void> cacheMovieDetails(MovieDetailed movie);
  Future<MovieDetailed> getCachedMovieDetails(String id);
}

// const vars to prevent misspellings
const String MOVIEDETAILSBOX = "MovieDetailedBox";
const String SEARCHBOX = "SearchBox";

class HiveMovieSearchRepo implements HiveMovieSearchRepoAbstract {
  Box movieDetailsBox = Hive.box(MOVIEDETAILSBOX) ?? null;
  // TODO implement searchbox
  // final searchBox = Hive.box(SEARCHBOX);

  Future<void> cacheMovieDetails(MovieDetailed movie) async {
    /// expects a MovieDetailed to cache.  Will cache that movie
    movieDetailsBox ?? await _openBox(movieDetailsBox, MOVIEDETAILSBOX);

    movieDetailsBox.put('${movie.id}', movie); …
Run Code Online (Sandbox Code Playgroud)

testing unit-testing mockito dart flutter

6
推荐指数
2
解决办法
2007
查看次数

标签 统计

flutter ×2

unit-testing ×2

dart ×1

flutter-getx ×1

getx ×1

mockito ×1

testing ×1