tim*_*tim 6 unit-testing mockito dart flutter
我正在编写一个Flutter具有广泛单元测试覆盖范围的应用程序。
我正在使用Mockito来模拟我的课程。
来自Java( Android) 世界,在那里我可以使用Mockito链接调用以在后续调用中返回不同的值。
我希望这能奏效。
import 'package:test/test.dart';
import 'package:mockito/mockito.dart';
void main() {
  test("some string test", () {
    StringProvider strProvider = MockStringProvider();
    when(strProvider.randomStr()).thenReturn("hello");
    when(strProvider.randomStr()).thenReturn("world");
    expect(strProvider.randomStr(), "hello");
    expect(strProvider.randomStr(), "world");
  });
}
class StringProvider {
  String randomStr() => "real implementation";
}
class MockStringProvider extends Mock implements StringProvider {}
但是它抛出:
Expected: 'hello'
Actual:   'world'
  Which: is different.
我发现有效的唯一工作方式是跟踪自己。
void main() {
  test("some string test", () {
    StringProvider strProvider = MockStringProvider();
    var invocations = 0;
    when(strProvider.randomStr()).thenAnswer((_) {
      var a = '';
      if (invocations == 0) {
        a = 'hello';
      } else {
        a = 'world';
      }
      invocations++;
      return a;
    });
    expect(strProvider.randomStr(), "hello");
    expect(strProvider.randomStr(), "world");
  });
}
00:01 +1:所有测试通过!
有没有更好的办法?
att*_*ona 11
Use a list and return the answers with removeAt:
import 'package:test/test.dart';
import 'package:mockito/mockito.dart';
void main() {
  test("some string test", () {
    StringProvider strProvider = MockStringProvider();
    var answers = ["hello", "world"];
    when(strProvider.randomStr()).thenAnswer((_) => answers.removeAt(0));
    expect(strProvider.randomStr(), "hello");
    expect(strProvider.randomStr(), "world");
  });
}
class StringProvider {
  String randomStr() => "real implementation";
}
class MockStringProvider extends Mock implements StringProvider {}
when您不必在测试开始时调用:
StringProvider strProvider = MockStringProvider();
when(strProvider.randomStr()).thenReturn("hello");
expect(strProvider.randomStr(), "hello");
when(strProvider.randomStr()).thenReturn("world");
expect(strProvider.randomStr(), "world");
Mockito 是 dart 有不同的行为。后续调用将覆盖该值。
| 归档时间: | 
 | 
| 查看次数: | 1174 次 | 
| 最近记录: |