我正在查看文档:https://pub.dartlang.org/packages/mockito,并试图更多地了解它。看来,在示例中,函数存根在接受字符串,但对我将如何实施我的模拟服务感到困惑。
我很好奇我怎么做。我拥有的服务非常简单明了。
class Group{}
class GroupService {}
class MockGroupService extends Mock implements GroupService {}
final mockProviders = [new Provider(MockGroupService, useExisting: GroupService];
这样您就可以看到我正在使用Angular Dart。
我在测试文件中创建了一个示例组。
group("service tests", (){
MockGroupService _mock;
testBed.addProviders([mockProviders]);
setUp(() async {
fixture = await testBed.create();
_mock = new MockGroupService();
//This is where I was going to create some stubbs for the methods
when(_mock.add()).thenReturn((){
return null; //return the object.
});
//create additional when statements for edit, delete, etc.
});
});
所以我认为会有一个参数添加(或2)。...我将如何正确地编码何时句子,以及这两个参数在当时的语句中如何反映?<<
本质上,我想用一个复杂的类进行测试。然后它将仅处理并返回。
我是否传达了类似的参数:(使用伪代码)
when(_mock.add(argThat(hasType(Group)))).thenReturn((Group arg)=> arg);
还是类似的东西?Hastype不起作用,因此我不能100%确定如何处理此设计。理想情况下,我尝试在测试中创建组,然后将其传递到添加功能中。似乎这些例子显示了字符串。
是的莫科托允许通过对象,您可以在测试中看到示例。
很难遵循,但是您可以在这里看到它使用深层平等检查是否指定了匹配器是否相等。
您问题的第二部分更为复杂。如果您想将被传递到模拟的值作为响应的一部分,则需要使用thenanswer。它为您提供了刚刚称为的调用。从该对象您可以获取并返回方法调用中使用的所有参数。
因此,对于您的添加示例,如果您知道正在传递的内容并且可以完全访问它,我会写:
Group a = new Group();
when(_mock.add(a)).thenReturn(a);
如果Group
对象是由我要写的其他内容创建的:
when(_mock.add(argThat(new isInstanceOf<Group>()))
.thenAnswer((invocation)=>invocation.positionalArguments[0]);
,或者如果您不在乎检查类型。根据您用于测试的检查,可能已经为您检查了类型。
when(_mock.add(any)).thenAnswer(
(invocation)=>invocation.positionalArguments[0]);
,或者如果您使用的是Dart 2.0:
when(_mock.add(typed(any))).thenAnswer(
(invocation)=>invocation.positionalArguments[0]);