我正在编写一个单元测试,其中我需要模拟JsObject,这样我就不需要在测试中执行实际的javascript互操作。但是,我使用索引运算符[]
来访问JsObject中的字段。我正在使用dart mockito库https://github.com/fibulwinter/dart-mockito我似乎找不到如何嘲笑被嘲笑对象上运算符的行为。
Mockito使存根处理变得非常容易,存根索引运算符的工作原理与存根任何其他方法一样。要截断以下类的索引运算符的映像:
class IndexTest {
operator[] (String value);
}
在第一步中,我们为该类创建了一个mock:
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)。在设置特定值之前,必须先设置默认值。