11 Aug 2013, 12:20

これぞテストの最終形態!FitNesseとRubySlimで実現するエンドツーエンドテスト

FitnesseとRubySlimを使ってでエンドツーエンドを書いてみました。

なんどもおんなじネタで恐縮だけれども、FitNesseとRubySlimを利用して、エンドツーエンドを実装してみました。

この記事は、以下の記事の延長になります。

FitNesse テストケースの用意

まずは、テストケースのページの作成です。

これは、前回の記事のまんま。

!contents -R2 -g -p -f -h

!define TEST_SYSTEM {slim}
!define TEST_RUNNER {/home/tsu-nera/src/ruby_fitnesse/rubyslim/bin/rubyslim}
!define COMMAND_PATTERN {ruby -I %p %m}
!define PATH_SEPARATOR { -I }
!path /home/tsu-nera/src/ruby_fitnesse/tests

こんな感じで、Decision Tableを作成しました。

|make directory                     |
|command       |expect  |get result?|
|mkdir testdir |testdir |0          |
|mkdir testdir2|testdir2|0          |
|mkdir testdir3|testdir4|0          |

Custom Fixturesの用意

ここからが本題。RubyでCustomFixtureを作成します。

/home/tsu-nera/src/ruby_fitnesse/testsに Test Fixtures作成。

なかなかウマクイカなかったので、こんな実験用コードも書いた。

require "./make_directory"
include Fixtures

@foo = MakeDirectory.new
@foo.set_command("mkdir testdir")
@foo.set_expect("/testdir/")
@foo.get_result
@foo = nil

これで、準備完了!Webからテストを実行します。

[//www.youtube.com/embed/3lGEuIW5LQc?rel=0]

テスト結果のログは、’Output Capture’というところをクリックすると見れる。障害調査も完璧。

11 Aug 2013, 06:34

RubyのAPIレベルのテストを直叩きできるFitNesse用フレームワーク ‘RubySlim’

FitNesseをRubyで利用するためのslimフレームワーク、RubySlimを試してみました。

RubySlimは、FitNesseのブラグインで、FitNesseからRubyのコマンドを実行することができるツールです。

作者はボブおじさんです。作者直々のチュートリアル動画も見つけました。

RubySlimを使ってみる

作業用ディレクトリ作成
mkdir ruby_fitnesse
cd ruby_fitnesse
fitnesseのダウンロード
rubyslimのダウンロード
git clone https://github.com/unclebob/rubyslim.git
TestCase の作成

まずは、URLにアクセスして、現れたURLを編集します。

http://localhost/RubySlimFirstExample

TEST_RUNNERには、bin.rubyslimを設定。

!pathには、Custom Fixtureのパスを設定。

!contents -R2 -g -p -f -h

!define TEST_SYSTEM {slim}
!define TEST_RUNNER {/home/tsu-nera/src/ruby_fitnesse/rubyslim/bin/rubyslim}
!define COMMAND_PATTERN {ruby -I %p %m}
!define PATH_SEPARATOR {-I}
!path /home/tsu-nera/src/ruby_fitnesse/tests
Custom Fixture作成
mkdir -p /home/tsu-nera/src/ruby_fitnesse/tests
cd /home/tsu-nera/src/ruby_fitnesse/tests
emacs some_decision_table.rb

ファイルの命名規約が重要。 SomeDecisionTable -> some_decision_table.rbのようにする。

 module Fixtures
  class SomeDecisionTable
    def set_input(input)
      @x = input
    end

    def get_output
      @x
    end
  end
end
Decision Table

wikiに戻って、decision Tableを書く。

Fixtures は module名に対応させること。

|Import|
|Fixtures|

some decision table <-> SomeDecisonTable Classに対応させること。

set_input <-> input,get_output <-> get output?に対応する。

|some decision table|
|input|get output?  |
|1    |2            |

これで、準備完了。testを実行すればOK.

10 Aug 2013, 23:26

C/C++のAPIレベルのテストを直叩きできるFitNesse用フレームワーク ‘CSlim’

FitNesseをC/C++で利用するためのslimフレームワークではcslimがあります。これを試してみました。

前回の続きです。

CSlimを使うと、APIレベルのテストを直接実行できます。ほかのテストツールとの役割分担はこんな感じ?

  Web I/F   ... Selenium
  -----------------------------
  API       ... CSlim
  -----------------------------
  Function  ... xUnit(CppUTest)

Authors は Robert Martin, James Grenning, and Doug Bradburyです。James Gremmingさんといえば ‘Test-Driven Development for Embedded C’の著者ですね。

cslimは内部でCppUTestを使ってます。CppUTestもこの本が詳しいです。

Webのドキュメントは、githubのwikiにある、以下の2つのリンクが詳しい。

cslimを動かす

以下の記事を参考にして、自分も動かしてみました。

まずは、CSlimを実行するディレクトリを作成

$ mkdir cpp_fitnesse
$ cd cpp_fitnesse

cslimはCppUTestに依存しているので先に、CppUTestをダウンロードしてコンパイル。

git clone git@github.com:cpputest/cpputest.git
mv cpputest CppUTest
./configure
make

cslimをダウンロードしてコンパイル。

git clone git@github.com:dougbradbury/cslim.git
cd cslim
make

cslimとcpputestは同じディレクトリにある必要がある。

<path>/cslim
<path>/cpputest

ブラウザに、以下のURLにブラウザからアクセス。

http://localhost/CslimFirstExamples

編集画面がでるので、以下のように修正。(pathは自分の環境に合わせて)

!contents -R2 -g -p -f -h

!define TEST_SYSTEM {slim}
!define TEST_RUNNER {/home/tsu-nera/src/cpp_fitnesse/cslim/CSlim_cslim}
!define COMMAND_PATTERN {%m}
!define SLIM_VERSION {0.0}

次に、以下のURLにブラウザからアクセスして、同じようにテストのサブページを作成する。

http://localhost/CslimFirstExamples.DecisionTableExample

wiki形式でテストケースを書く。

|Modulus                 |
|value|divisor|remainder?|
|6    |2      |0         |
|13   |27     |13        |
|5    |2      |1         |

テストを実行すると、失敗する。

気を取り直して、テストケースを書く。コードはこのサイトを参照。

<path>/fixture/Modulus.cpp
<path>/fixture/Fixture.c

Pointは、テスト対象ファイルの下に、以下の様な記述をすること。これで、自分の関数をfixtureから呼び出すための登録ができる。

SLIM_CREATE_FIXTURE(Modulus) 
    SLIM_FUNCTION(setValue)
    SLIM_FUNCTION(setDivisor)
    SLIM_FUNCTION(remainder)
SLIM_END

また、Fixture.cにModulesフィクスチャを登録すること。

    SLIM_FIXTURE(Modulus)

再度makeしてテストを実行すると、今度は成功した。

for cygwin memo

Cygwin環境では、うまく動作させることができなかった。makefileに細工が必要なようだが、以下の記事を参考に編集すると、コンパイルはできるものの、Slim serverにアクセスできない。

my environment

  • FitNesse 20130530
  • CentOS 6.4

10 Aug 2013, 12:55

受け入れテスト用フレームワーク「Fitnesse」導入手順のまとめ

受け入れテスト用のテスト管理ツール、「Fitnesse」を使ってみました。

[toc]

Fitnesseとは

Fitnesseとは、wiki形式でフリーのテスト管理用ツールです。

以下のような特徴があります。

  • 簡単なセットアップ
  • 簡単に使えるwikiサーバ
  • 仕様書や要求がinputとして使える
  • 豊富な言語サボート

最近読み始めた、「実践アジャイルテスト」で頻繁に紹介されていました。

作者は、「ボブおじさん」こと、ロバート・マーチンさんです。以前、「CleanCoder」を読んだときにも、紹介されていました。

Fitnesseを導入する

環境

  • Windows 7 64bit
  • Java 1.6.0_2

Fitnesse の Download

正式版のダウンロードは、公式サイトの以下のリンクから。

また、開発版はgithubから。

Fitnesse の 起動

以下をコマンドラインから叩くだけ。

$ java -jar fitnesse-standalone.jar

こんなメッセージが表示されれば、起動完了。

FitNesse (v20130530) Started...
        port:              80
        root page:         fitnesse.wiki.FileSystemPage at ./FitNesseRoot
        logger:            none
        authenticator:     fitnesse.authentication.PromiscuousAuthenticator
        page factory:      fitnesse.responders.PageFactory
        page theme:        fitnesse_straight
        page version expiration set to 14 days.

http://localhost/にアクセスすると、Fitnesseが現れる。わぉ、簡単(・∀・)

Port指定の起動もできる。

$ java -jar fitnesse-standalone.jar -p 8080

Fitnesseの使い方

公式ドキュメントは以下。

Sample Test を動かす

起動したら、http://localhost/FitNesse.UserGuide.TwoMinuteExampleに移動。

右上に TEST とかかれたボタンがあるので押す。テストが走る。

あらら・・失敗orz.

次に TOOL ボタンの Propertyをクリック。続いて Action:というところにある Editにチェックを入れる。すると、 EDIT というボタンができるので、クリックする。編集画面が出るのて、表の部分を以下のように修正。

# before
| 100 | 4 | 25.0 |
# after
| 100 | 4 | 25.0 |

再びテストを実行すると、テストがすべてパスする。wikiで編集できる気軽さをまずは実感(・∀・)

Fitnesseの仕組み

Fitnesseの仕組みは、以下のページの図を参照。

FitNesse.UserGuide.OneMinuteDescription

オレンジの部分を自分で用意する必要がある。

  • TestCases
  • Custom Fixture
  • SUT

緑の部分は、FitNesseで用意されている。CustomFixtureを実行するためには、2つの手段がある。

FIT

HTMLでかかれたテスト管理用ツール。

FitnesseはこのFITのHTMLをwikiで実行できるようにしたもの、という言い方ができる。

SLIM

Fitnesseのwikiを解析して、CostomFixutreを実行するためのフレームワーク。

様々な言語に対応しているのが特徴。そのため、FITよりも拡張性がある。

ここからがいいところだけれども、続きはまた次回!