我想用Mockito测试下面的(简化)代码.我不知道如何告诉Mockito第一次失败,然后第二次成功.
for(int i = 1; i < 3; i++) {
String ret = myMock.doTheCall();
if("Success".equals(ret)) {
log.write("success");
} else if ( i < 3 ) {
log.write("failed, but I'll try again. attempt: " + i);
} else {
throw new FailedThreeTimesException();
}
}
Run Code Online (Sandbox Code Playgroud)
我可以设置成功测试:
Mockito.when(myMock).doTheCall().thenReturn("Success");
Run Code Online (Sandbox Code Playgroud)
并且失败测试:
Mockito.when(myMock).doTheCall().thenReturn("you failed");
Run Code Online (Sandbox Code Playgroud)
但是,我如何测试如果它失败一次(或两次)然后成功,那很好吗?
我正在编写一个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 {}
Run Code Online (Sandbox Code Playgroud)
但是它抛出:
Expected: 'hello'
Actual: 'world'
Which: is different.
Run Code Online (Sandbox Code Playgroud)
我发现有效的唯一工作方式是跟踪自己。
void main() {
test("some string test", () {
StringProvider strProvider = MockStringProvider();
var invocations = 0; …Run Code Online (Sandbox Code Playgroud)