2012年11月26日月曜日

autest 1.0.0 α をリリースしました

AutoIt 用テスティングフレームワーク autest をアルファリリースしました。
ダウンロードはこちらから

AutoIt は Windows 用のプログラム言語です。主に Windows の GUI 操作自動化に使用します。
詳しいことは、ここでは省きます。


今回、このテスティングフレームワークを作成したのは、
「AutoIt で GUI の自動テストを組んだとき、テストが失敗したときのログ出力を
しっかり書いておかないと、原因がわかりにくい」と感じたからです。

まずはアサーションの提供から
今回リリースした autest では、他のテスティングフレームワークに似たアサーションに対応しています。

サンプルを紹介します。
#include "../../include/autest.au3"

$NotepadClassName = "[CLASS:Notepad]"
$strSendTest = "hello world."

AUTEST_ASSERT_TRUE( Run("notepad.exe") )
AUTEST_EXPECT_TRUE( WinWaitActive($NotepadClassName, "", 5) )

AUTEST_EXPECT_TRUE( ControlSend($NotepadClassName, "", "Edit1", $strSendTest) )
AUTEST_EXPECT_STREQ( $strSendTest, ControlGetText($NotepadClassName, "", "Edit1") )

AUTEST_ASSERT_TRUE( WinClose($NotepadClassName) )

; 保存しますかダイアログが出るので、ここでタイムアウト失敗する
AUTEST_ASSERT_TRUE( WinWaitClose($NotepadClassName, "", 5) )

こちらのサンプルは
  • メモ帳を起動
  • 「Hello World.」と入力し
  • 入力内容を検証したのち
  • メモ帳を終了します(保存ダイアログが出るので、この処理はタイムアウトし失敗します)

実行した画面がこちらになります。



コンソールにはこのようなメッセージが出力されます。
sample.au3:30
error: Value of WinWaitClose($NotepadClassName, "", 5)
  Actual: 0
Expected: True

このメッセージから、
sample.au3 ファイルの 30行目 で WinWaitClose($NotepadClassName, "", 5) が 0 を返して失敗したということがひと目でわかります。

ビルド方法
autest のアサーション関数は通常の AutoIt のコンパイル方法でもエラーにならないよう設計されていますが、ファイルや行、コードの詳細を出力するには専用のビルド手順が必要になります。

こちらが先ほどのサンプルの Makefile になります。
SOURCES = sample.au3

build: DEFAULT_TARGETS

include $(AUTEST_ROOT)/toolchain/commondefs

Make 用の定義などはすべて commondefs ファイルに記述されています。
ユーザーが記述するのは以上になります。

あとは普通に Make するだけです。

どういう仕組みか
Make で何をしているかというと、
  1. SOURCES で定義されたファイルを '#' を "__sharp__" に置換して .obj/*.c ファイルに出力
  2. .c ファイルをプリプロセッサで処理し "__sharp__" を '#' に戻して *.pau3 ファイルに出力
    (その他 AutoIt の構文に合わせて置換しています)
  3. .pau3 ファイルを AutoIt で実行ファイルにコンパイル
というようなことをしています。
C プリプロセッサを使用して、関数引数にファイル名や行、引数の文字列を付加することで、
先に示した出力を得られるようになります。

まとめ
プリプロセッサ便利!

0 件のコメント:

コメントを投稿