我正在编写一个单元测试,需要模拟一个JsObject,以便在测试中不需要进行实际的JavaScript交互。但是,我使用索引运算符[]
来访问JsObject中的字段。我正在使用dart mockito库https://github.com/fibulwinter/dart-mockito进行模拟,但似乎找不到如何模拟模拟对象上运算符的行为。
我正在编写一个单元测试,需要模拟一个JsObject,以便在测试中不需要进行实际的JavaScript交互。但是,我使用索引运算符[]
来访问JsObject中的字段。我正在使用dart mockito库https://github.com/fibulwinter/dart-mockito进行模拟,但似乎找不到如何模拟模拟对象上运算符的行为。
Mockito使得存根(stubbing)非常容易,存根索引操作符的方式与存根任何其他方法的方式相同。假设您想要存根以下类的索引操作符:
class IndexTest {
operator[] (String value);
}
class MockIndexTest extends Mock implements IndexTest {
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
现在,在您的测试中,您可以使用索引运算符设置预期调用的返回值:
test('Test', () {
final t = new MockIndexTest();
// Set return values
when(t[any]).thenReturn(0); // 1
when(t['one']).thenReturn(1); // 2
when(t['two']).thenReturn(2); // 3
// Check return values
expect(t['one'], equals(1));
expect(t['two'], equals(2));
expect(t['something else'], equals(0));
});
不进行存根操作时,调用总是返回null
。使用mockito提供的any
值,您可以为任何参数设置默认返回值(见1)。您还可以为特定一组参数设置返回值(见2和3)。在设置特定返回值之前,必须先设置默认值。