Dart Mockito在第一次、第二次... n次调用时返回不同的值

c2e8gylq  于 2022-11-08  发布在  其他
关注(0)|答案(2)|浏览(380)

在Java Mockito中,可以为每个调用模拟一个不同的返回值,如下所示:

when(myMock.doTheCall())
   .thenReturn("You failed")
   .thenReturn("Success");

还是这样:

when(myMock.doTheCall()).thenReturn("Success", "you failed");

来源:Simulate first call fails, second call succeeds
我想知道如何在Dart Mockito中实现同样的效果。我找不到相关的文档

bfnvny8b

bfnvny8b1#

您可以在此处阅读mockito文档:https://pub.dev/documentation/mockito/latest/解决方案使用的是所需响应的有序数组。例如:

final responses = ["You failed", "Success"];
when(myMock.doTheCall()).thenAnswer((_)=>responses.removeAt(0))

这也适用于异步响应(将异步字添加到方法thenAnswer(...))。

3bygqnnd

3bygqnnd2#

我已经写了一个基于@Jhonatan的答案的小扩展。它将返回列表,并在更多的调用中使用最新的值。

import 'package:mockito/mockito.dart';

extension When<T> on PostExpectation<T> {
  void thenReturnOneByOne(List<T> args) {
    assert(args.isNotEmpty, 'Argument list should not be empty!');
    thenAnswer((_) => 1 == args.length ? args[0] : args.removeAt(0));
  }
}

使用方法:

void main() {
   test('test', () {
      final clock = MockClock();
      when(clock.getMillis()).thenReturnOneByOne([5, 10, 30]);

      /// The values will be 5, 10, 30, 30, 30, 30...
   });
}

相关问题