Flutter 中的 Mockito 与 Mocktail

Bur*_*rak 30 flutter

我已经开始编写测试了。我看到mockitomocktail作为最常用的测试库。我找不到任何解释它们之间差异的问题/文章。如果有经验丰富的开发人员(同时使用过它们),您能解释一下它们的差异/优点/缺点吗?我应该更喜欢哪一个?

Max*_*Max 46

1.假设您是 Flutter 新手,那么使用mocktail包可能会更容易。

mockito包的主要“不便之处”是,您需要生成运行flutter pub run build_runner build 的模拟,定义像@GenerateMocks这样的元注释,以及像xxx.mocks.dart这样的导入,以及在pubspec上额外的build_runner dev 依赖项.yaml

mocktail包简化了模拟:您只需要扩展 Mock 类即可。就是这样。无需代码生成、注释、“神奇” xxx.mocks.dart导入。

2.另外,您必须记住,无酒精鸡尾酒包非常新,并且只有 10 个月的稳定历史。mockito包是一个经过时间和开发人员验证的库,拥有近 8的稳定发布历史:该库众所周知,并且在 Flutter 和 Dart 社区中广泛使用。

凭借经验,您将更好地了解哪个库更适合您的项目需求。

PS:你可以看一下这两个包的代码片段。

无酒精鸡尾酒片段:

import 'package:mocktail/mocktail.dart';

// Real Cat class
class Cat {
  // ...
}

// Mock Cat Class
class MockCat extends Mock implements Cat{}

void main() {
  // Create a Mock Cat instance
  final cat = MockCat();
}
Run Code Online (Sandbox Code Playgroud)

模拟片段截图

import 'package:mockito/annotations.dart'
import 'package:mockito/mockito.dart'

import 'cat.mocks.dart';

// REAL class
class Cat {
 // ...
}

// Annotation which generates the cat.mocks.dart library
@GenerateMocks([Cat])
void main() {
  // Create a mock object
  final cat = MockCat();
}
Run Code Online (Sandbox Code Playgroud)


Bur*_*rak 14

在经历了这两种情况后回答我自己的问题:

起初我决定使用mockito,因为它更有声誉。但是,一次又一次地重新生成模拟类是很困难的。但后来,我想给一个无酒精鸡尾酒的机会,并且确实发现它更好!我建议使用它来代替mockito,因为它有一些优点。不必生成模拟类并不是唯一的优点!