Я нахожусь в процессе написания 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: все тесты пройдены!
Есть ли лучший способ?