模拟 DateTime 参数输入

时间:2021-07-24 15:18:28

标签: flutter intellij-idea mockito

是否有人在将 any Mockito 方法提供给 DateTime 模拟方法参数时遇到问题?基本上我在模拟类 Future<int> testMethod(DateTime datetime) 上实现了这个方法。

因此,当我尝试通过 when(mockClass.testMethod(any)).thenAnswer((_) async => 1) 对测试场景的响应进行存根时,这始终显示在 IntelliJ 行编辑器 - error: The argument type 'Null' can't be assigned to the parameter type 'DateTime'. (argument_type_not_assignable) 上。


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

abstract class TestClass {
  Future<int> testMethod(DateTime dateTime);
}

class MockTestClass extends Mock implements TestClass {}

class InvokeClass {

  final TestClass testClass;

  InvokeClass(this.testClass);


}

// @GenerateMocks([InvokeClass, TestClass])
void main() {
  TestClass testClass = MockTestClass();
  InvokeClass invokeClass;

  setUp(() {
    testClass = MockTestClass();
    invokeClass = InvokeClass(testClass);
  });

  test('', () async {
    when(testClass.testMethod(any)).thenAnswer((_) => 1);
  });
}

2 个答案:

答案 0 :(得分:1)

您是否尝试过将参数设为 Nullable 以便该方法变为

testMethod(DateTime? datetime)

答案 1 :(得分:0)

最简单的方法是使用 mockito 5.0.0 中的代码生成器:https://pub.dev/packages/mockito#lets-create-mocks

基本上你会使用:

abstract class MyClass {
  Future<int> testMethod(DateTime dateTime);
}

@GenerateMocks([MyClass])
void main() {
  final mock = MockMyClass();
  when(mock.testMethod(any)).....
}

生成器将创建一个采用可为空的 DateTime 的方法,因此 any 将起作用。请参阅mockito documentation for more details

更新:给你的例子应该是这样的:

import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'testclass.mocks.dart'; // this will be generated by `build_runner build`

abstract class TestClass {
  Future<int> testMethod(DateTime dateTime);
}

class InvokeClass {

  final TestClass testClass;

  InvokeClass(this.testClass);


}

@GenerateMocks([TestClass])
void main() {
  MockTestClass testClass = MockTestClass();
  InvokeClass invokeClass;

  setUp(() {
    testClass = MockTestClass();
    invokeClass = InvokeClass(testClass);
  });

  test('', () async {
    when(testClass.testMethod(any)).thenAnswer((_) => 1);
  });
}

在这些更改之后运行 flutter run build_runner builddart run build_runner build

相关问题