[Dart] Unittest と drone.io #dartlangjp

[Dart] Unittest と drone.io #dartlangjp

更新: 2013年6月11日

DartでUnitTestのお話 Dartでテストはどう書くの?というお話と
drone.ioというCIサーバーの導入のお話です。

sample project

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を利用。
■ テストするプロジェクトを選択。
スクリーンショット 13 06 11 13 53


■ こんな感じでCommandsを記述
他のプロジェクトを真似したはずなのですが[sh test/run.sh]と記述しないと
permission deniedによりエラーが… why?
スクリーンショット 13 06 11 13 54 drone.io

pub install dartanalyzer —version

sh test/run.sh


Build nowボタンで実行!

■ Build now!!!testが失敗していますね。
スクリーンショット 13 06 11 13 59


■ githubに修正版をpush!!! うまくいきましたね
githubに変更があった場合、drone.ioはすみやかにテストを実行してくれます。 スクリーンショット 13 06 11 14 05 ↓こんな感じのバッジも表示できます。Dartのプロジェクトではよく見ますね。
駆け足でしたが、実行可能なprojectもアップしてありますのでご参照いただけば
とおもいます。 このエントリーをはてなブックマークに追加

最新記事をフォロー

RSS Feed