gpt4 book ai didi

dart - Dart 是否支持参数化单元测试?

转载 作者:行者123 更新时间:2023-12-04 17:15:10 26 4
gpt4 key购买 nike

我想运行一个 Dart 测试,它用一组输入和预期输出重复,类似于 JUnit 的可能。

我编写了以下测试来实现类似的行为,但问题是如果所有测试输出都计算错误,则测试只会失败一次:

import 'package:test/test.dart';

void main() {
test('formatDay should format dates correctly', () async {
var inputsToExpected = {
DateTime(2018, 11, 01): "Thu 1",
...
DateTime(2018, 11, 07): "Wed 7",
DateTime(2018, 11, 30): "Fri 30",
};

// When
var inputsToResults = inputsToExpected.map((input, expected) =>
MapEntry(input, formatDay(input))
);

// Then
inputsToExpected.forEach((input, expected) {
expect(inputsToResults[input], equals(expected));
});
});
}

我想使用参数化测试的原因是,我可以在我的测试中实现以下行为:
  • 只写一个测试
  • 测试 n不同的输入/输出
  • 失败 n次如果全部n测试失败
  • 最佳答案

    Dart test包装很聪明,因为它并没有试图太聪明。 test function 只是一个你调用的函数,你可以在任何地方调用它,甚至在循环或另一个函数调用中。
    因此,对于您的示例,您可以执行以下操作:

    group("formatDay should format dates correctly:", () {
    var inputsToExpected = {
    DateTime(2018, 11, 01): "Thu 1",
    ...
    DateTime(2018, 11, 07): "Wed 7",
    DateTime(2018, 11, 30): "Fri 30",
    };
    inputsToExpected.forEach((input, expected) {
    test("$input -> $expected", () {
    expect(formatDay(input), expected);
    });
    });
    });

    唯一要记住的重要事情是所有对 test 的调用。应该在 main 时同步发生函数被调用,所以不在异步函数中调用它。如果您需要时间在运行测试之前进行设置,请在 setUp 中进行设置。反而。

    您还可以创建一个辅助函数,并完全删除 map (这是我通常所做的):
    group("formatDay should format dates correctly:", () {
    void checkFormat(DateTime input, String expected) {
    test("$input -> $expected", () {
    expect(formatDay(input), expected);
    });
    }
    checkFormat(DateTime(2018, 11, 01), "Thu 1");
    ...
    checkFormat(DateTime(2018, 11, 07), "Wed 7");
    checkFormat(DateTime(2018, 11, 30), "Fri 30");
    });

    在这里,每次调用 checkFormat 都会引入一个具有自己名称的新测试,并且每个测试都可能单独失败。

    关于dart - Dart 是否支持参数化单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53103300/

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