[Dart] Unittest と drone.io #dartlangjp
DartでUnitTestのお話 Dartでテストはどう書くの?というお話と
drone.ioというCIサーバーの導入のお話です。
sample project
- example project
- https://github.com/mogeta/dart_unittest_example
- example drone.io
- https://drone.io/github.com/mogeta/dart_unittest_example
code,project解説
http://www.dartlang.org/articles/dart-unit-tests/
で解説されているUnitTestをhttps://drone.io/で実行するところまで
持って行きたいと思います。
DartでのunitTestは、pubにライブラリがあり、 http://api.dartlang.org/docs/releases/latest/unittest.htmlを使用します。
ディレクトリ構成
Dartのライブラリを見ていると以下の構成がデファクトスタンダードに近いようです。
-
package
-
mylib
-
test
-
quicksort_test.dart
-
run_all.dart
-
run.sh
今回用意したプロジェクトのファイルを以下に解説。
quicksortを実装したdartファイルのテストを行います。
■ quicksort_test.dart
実際のテスト内容を記述してあります。
test()にて、テスト名と、実行するfunctionを記載。
library quicksort_test;
import ‘dart:io’; import ‘package:unittest/unittest.dart’; import ’../quicksort.dart’;
main(){ test(‘QuickSort’, () => expect(quickSort([5, 4, 3, 2, 1]), orderedEquals([1, 2, 3, 4, 5])) ); }
■ run_all.dart
すべてのテストを実行するためにGroupにまとめています。
addGroup()を用いて、test用のdartファイルを記述。
library test.run_all;
import ‘dart:io’ show Options; import ‘package:unittest/compact_vm_config.dart’; import ‘package:unittest/unittest.dart’; import ‘quicksort_test.dart’ as quicksort_test;
main() { var args = new Options().arguments; var pattern = new RegExp(args.length > 0 ? args[0] : ’.’); useCompactVMConfiguration();
void addGroup(testFile, testMain) { if (pattern.hasMatch(testFile)) { group(testFile.replaceAll(‘_test.dart’, ’:’), testMain); } }
addGroup(‘quicksort_test.dart’, quicksort_test.main); }
■ run.sh
dartanalizerとunittestを実行するためのシェルスクリプトを記述します。
drone.ioはこのスクリプトを実行することでテストを行います。
#!/bin/bash
echo Analyzing library for warnings or type errors
dartanalyzer —package-root packages —fatal-warnings —fatal-type-errors *.dart || \ echo “ignore analyzer errors”
dart —enable-type-checks —enable-asserts test/run_all.dart $@
drone.ioの準備
https://drone.io/のアカウントを取得し、projectを作成します。
Github,bitbucket,google codeのいずれかのcodeを取得します。今回はgithubを利用。
■ テストするプロジェクトを選択。
■ こんな感じでCommandsを記述
他のプロジェクトを真似したはずなのですが[sh test/run.sh]と記述しないと
permission deniedによりエラーが… why?
drone.io
pub install dartanalyzer —version
sh test/run.sh
Build nowボタンで実行!
■ Build now!!!testが失敗していますね。
■ githubに修正版をpush!!! うまくいきましたね
githubに変更があった場合、drone.ioはすみやかにテストを実行してくれます。 ↓こんな感じのバッジも表示できます。Dartのプロジェクトではよく見ますね。
駆け足でしたが、実行可能なprojectもアップしてありますのでご参照いただけば
とおもいます。 