gpt4 book ai didi

unit-testing - 使用相同的参数链接多个调用以返回不同的结果

转载 作者:IT王子 更新时间:2023-10-29 07:12:52 25 4
gpt4 key购买 nike

我正在编写一个包含大量单元测试的 Flutter 应用程序。
我正在使用 Mockito模拟我的类(class)。
来自 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: All tests passed!

有没有更好的办法?

最佳答案

使用列表并通过 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 {}

关于unit-testing - 使用相同的参数链接多个调用以返回不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53896225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com