模拟 DateTime 参数输入
Mocking a DateTime parameter input
有人在向 DateTime
模拟方法参数提供 any
Mockito 方法时遇到问题吗?基本上我在模拟 class 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);
});
}
您是否尝试过使参数为 Nullable 以便方法变为
testMethod(DateTime? datetime)
最简单的方法是使用 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)).....
}
生成器将创建一个采用可为 null 的 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
.
有人在向 DateTime
模拟方法参数提供 any
Mockito 方法时遇到问题吗?基本上我在模拟 class 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);
});
}
您是否尝试过使参数为 Nullable 以便方法变为
testMethod(DateTime? datetime)
最简单的方法是使用 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)).....
}
生成器将创建一个采用可为 null 的 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
.