我是 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) 对不起,如果这似乎是一个愚蠢的问题。我正在按照 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)