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
drone.io

■ githubに修正版をpush!!! うまくいきましたね
githubに変更があった場合、drone.ioはすみやかにテストを実行してくれます。 ↓こんな感じのバッジも表示できます。Dartのプロジェクトではよく見ますね。
↓こんな感じのバッジも表示できます。Dartのプロジェクトではよく見ますね。
 駆け足でしたが、実行可能なprojectもアップしてありますのでご参照いただけば
駆け足でしたが、実行可能な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.shdartanalizerと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?
pub install dartanalyzer --version sh test/run.sh
Build nowボタンで実行!
■ Build now!!!testが失敗していますね。■ githubに修正版をpush!!! うまくいきましたね
githubに変更があった場合、drone.ioはすみやかにテストを実行してくれます。
 駆け足でしたが、実行可能なprojectもアップしてありますのでご参照いただけば
駆け足でしたが、実行可能なprojectもアップしてありますのでご参照いただけばとおもいます。
 
 
 
 
0 件のコメント :
コメントを投稿