LoginSignup
5

More than 5 years have passed since last update.

HaxeでFizzBuzz TDDをやってみる

Last updated at Posted at 2014-07-25

環境構築

Haxe

IDEである FlashDevelop をインストールしておきます。

空のプロジェクトも作っておきましょう。

TDD

プロジェクト直下に移動して、以下のように進めます。

shell
$ npm install -g coffee-script
...
$ npm install -g mocha
...
$ npm install expect.js --save-dev
...
$ npm install -g testem
...
$ mkdir test
$ touch test/fizzbuzztest.coffee
$ coffee -cw test/fizzbuzztest.coffee &

これで、fizzbuzztest.coffeeが更新されると自動的にJavaScriptに変換してくれます。

次に、プロジェクト直下に testem.json というファイルを作ります。

testem.json
{
  "framework": "mocha",
  "src_files": [
    "bin/*.js",
    "test/*test.js"
  ],
  "launchers": {
    "Mocha": {
      "command": "mocha test/*test.js -R tap",
      "protocol": "tap"
    }
  },
  "launch_in_dev": [
    "Mocha"
  ]
}

testemを起動します。

shell
$ testem

これで、Haxeでコンパイルしたときやテストを更新したときに自動的にテストが走ります

テストを書く(レッド)

すいませんがいきなり最後まで書きます。

fizzbuzztest.coffee
expect = require 'expect.js'
fizzbuzz   = require '../bin/FizzBuzz.js'

describe 'fizzbuzz', ->

    f = new fizzbuzz.FizzBuzz # スコープから出したクラスを参照する

    it 'return string Fizz when 3 is given', ->
        result = f.returnString( 3 )
        expect( result ).to.be( 'Fizz' )

    it 'return string 2 when 2 is given', ->
        result = f.returnString( 2 )
        expect( result ).to.be( '2' )

    it 'return string Buzz when 5 is given', ->
        result = f.returnString( 5 )
        expect( result ).to.be( 'Buzz' )

    it 'return string Fizz when 6 is given', ->
        result = f.returnString( 6 )
        expect( result ).to.be( 'Fizz' )

    it 'return string Buzz when 10 is given', ->
        result = f.returnString( 10 )
        expect( result ).to.be( 'Buzz' )

    it 'return string FizzBuzz when 15 is given', ->
        result = f.returnString( 15 )
        expect( result ).to.be( 'FizzBuzz' )

    it 'return string FizzBuzz when 15 is given', ->
        result = f.returnString( 30 )
        expect( result ).to.be( 'FizzBuzz' )

実装する(グリーン)

FlashDevelopでFizzBuzzというクラスを作ります。

FizzBuzz.hx
package ;

@:expose( "FizzBuzz" ) // テストから見えるように、クラスをスコープから出す
class FizzBuzz{

    public function new() {

    }

    public function returnString(n : Int) : String {
        if ( n % 15 == 0 ) {
            return "FizzBuzz";
        }
        else if ( n % 3 == 0 ) {
            return "Fizz";
        }
        else if ( n % 5 == 0 ) {
            return "Buzz";
        }
        else {
            return Std.string(n);
        }
    }
}
Main.hx
package ;

import js.Lib;

class Main {

    static function main() {
        var f = new FizzBuzz();
        for (i in 1...100) {
            var s : String = f.returnString( i );
            trace( s );
        }

    }

}

これでできあがりです。

Windows_7.jpg

クラスを出すところが、ややハマりどころでした。

そういえばFizzBuzzって何?って方はググって下さい。筆無精で申し訳ないです。


ブログやってます:Weed Software

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5