单元测试-如何用dart-mockito模拟索引运算符



我正在编写一个单元测试,其中我需要模拟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)。在设置特定值之前,必须先设置默认值。

相关内容

  • 没有找到相关文章

最新更新