Dart 3におけるtable driven test

2023/08/01

今年リリースされたDart 3には、新たにrecordという機能が導入された(Doc)。これは他の言語でいうところのtuple的なもので、複数の値を持つことができる。keyやindexで要素にアクセスできるし、destructureもできる。

それほど多用する機能ではないが、table driven testを書く場合には重宝する。

void main() {
  group('NumberParser.parse', () {
    for (final testCase in [
      (input: 'one', output: 1),
      (input: 'two', output: 2),
      (input: 'three', output: 3),
      (input: 'four', output: 4),
    ]) {
      test('"${testCase.input}"を渡すと${testCase.output}が返される', () {
        final parser = NumberParser();
        final output = parser.parse(testCase.input);
        expect(output, testCase.output);
      });
    }
  });
}

実行結果

✓ NumberParser.parse "one"を渡すと1が返される
✓ NumberParser.parse "two"を渡すと2が返される
✓ NumberParser.parse "three"を渡すと3が返される
✓ NumberParser.parse "four"を渡すと4が返される
Exited

他の言語でも、TypeScriptやSwiftあたりは同じ書き方ができそう。