DartでUnitTestのお話
Dartでテストはどう書くの?というお話と
drone.ioというCIサーバーの導入のお話です。
で解説されているUnitTestをhttps://drone.io/で実行するところまで
持って行きたいと思います。
DartでのunitTestは、pubにライブラリがあり、 http://api.dartlang.org/docs/releases/latest/unittest.htmlを使用します。
今回用意したプロジェクトのファイルを以下に解説。
quicksortを実装したdartファイルのテストを行います。
■ quicksort_test.dart
実際のテスト内容を記述してあります。
test()にて、テスト名と、実行するfunctionを記載。
すべてのテストを実行するためにGroupにまとめています。
addGroup()を用いて、test用のdartファイルを記述。
dartanalizerとunittestを実行するためのシェルスクリプトを記述します。
drone.ioはこのスクリプトを実行することでテストを行います。
Github,bitbucket,google codeのいずれかのcodeを取得します。今回はgithubを利用。
■ テストするプロジェクトを選択。
■ こんな感じでCommandsを記述
他のプロジェクトを真似したはずなのですが[sh test/run.sh]と記述しないと
permission deniedによりエラーが… why?
drone.io
■ githubに修正版をpush!!! うまくいきましたね
githubに変更があった場合、drone.ioはすみやかにテストを実行してくれます。 ↓こんな感じのバッジも表示できます。Dartのプロジェクトではよく見ますね。
駆け足でしたが、実行可能なprojectもアップしてありますのでご参照いただけば
とおもいます。
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もアップしてありますのでご参照いただけば
とおもいます。
0 件のコメント :
コメントを投稿