是否有人在将 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);
});
}
答案 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 build
或 dart run build_runner build
。