dart - 错误状态 : Mock method was not called within `w

我正在尝试使用 mockito 在 flutter 中模拟 httpRequest

这里我定义了一个全局http客户端:

library utgard.globals;

import 'package:http/http.dart' as http;

http.Client httpClient = http.Client();

然后我在集成测试中替换:

import 'package:flutter_driver/driver_extension.dart';
import 'package:http/http.dart' as http;
import 'package:utgard/globals.dart' as globals;
import 'package:mockito/mockito.dart';

import 'package:utgard/main.dart' as app;

class MockClient extends Mock implements http.Client {}

void main() {
  final MockClient client = MockClient();
  globals.httpClient = client;

  enableFlutterDriverExtension();

  app.main();
}

然后我尝试使用mockito的when:

test('login with correct password', () async {
      final client = MockClient();

      when(globals.httpClient.post('http://www.google.com'))
          .thenAnswer((_) async => http.Response('{"title": "Test"}', 200));

      await driver.enterText('000000');
      await driver.tap(loginContinuePasswordButton);
    });

但我收到以下错误:

Bad state: Mock method was not called within when(). Was a real method called?

最佳答案

当您实现要模拟的方法而不是让 Mockito 执行该操作时,可能会发生此问题。

以下代码将返回 Bad state: Mock 方法未在 when() 中调用。是否调用了真正的方法?:

class MockFirebaseAuth extends Mock implements FirebaseAuth {
  FirebaseUser _currentUser;

  MockFirebaseAuth(this._currentUser);

  // This method causes the issue.
  Future<FirebaseUser> currentUser() async {
    return _currentUser;
  }
}

final user = MockFirebaseUser();
final mockFirebaseAuth = MockFirebaseAuth(user);

// Will throw `Bad state: Mock method was not called within `when()`. Was a real method called?`
when(mockFirebaseAuth.currentUser())
    .thenAnswer((_) => Future.value(user));

你想要的是:

class MockFirebaseAuth extends Mock implements FirebaseAuth {}

final user = MockFirebaseUser();
final mockFirebaseAuth = MockFirebaseAuth();

// Will work as expected
when(mockFirebaseAuth.currentUser())
    .thenAnswer((_) => Future.value(user));

当您尝试在非模拟子类上调用 when() 时也会发生此问题:

class MyClass {
  String doSomething() {
    return 'test';
  }
}

final myClassInstance = MyClass();

// Will throw `Bad state: Mock method was not called within `when()`. Was a real method called?`
when(myClassInstance.doSomething())
    .thenReturn((_) => 'mockedValue');

关于dart - 错误状态 : Mock method was not called within `when()` . 调用了真正的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55424575/

相关文章:

string - flutter/Dart : Convert HEX color string t

flutter - 在 Flutter PageView 中切换页面时丢失小部件状态

android - 为什么我的 Flutter 应用的 ListView 滚动不如 Flutter

ios - 如何在键盘外观上为 Flutter 布局设置动画

flutter - Flutter 目录不是 GitHub 项目的克隆

flutter - 小部件测试失败,未找到任何 MediaQuery 小部件

flutter - 保留选项卡 View 页面之间的状态

android - 在 Scroll Flutter 上隐藏 Appbar?

flutter - 在 FutureBuilder 中设置提供者值

android - Flutter:在 Android Studio 中打开 android 模块被