如何使用Dart Mockito模拟索引运算符?

3

我正在编写一个单元测试,需要模拟一个JsObject,以便在测试中不需要进行实际的JavaScript交互。但是,我使用索引运算符[]来访问JsObject中的字段。我正在使用dart mockito库https://github.com/fibulwinter/dart-mockito进行模拟,但似乎找不到如何模拟模拟对象上运算符的行为。

1个回答

4

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)。在设置特定返回值之前,必须先设置默认值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接