2016年1月7日木曜日

busted で Lua スクリプトのテストをやってみた

概要

busted は Lua スクリプトをテストするためのテストフレームワークです
インストールから簡単な使い方まで紹介したいと思います

環境

  • CentOS 6.7 64bit Final
  • Lua 5.1.4
  • LuaRocks 2.1.2
  • busted 2.0.rc11-0

busted のインストール

luarocks を使ってインストールできます
luarocks のインストールはこちらを参照してください

  • luarocks install busted

依存するライブラリが結構ありました

busted
2.0.rc11-0 (installed) - /usr/lib/luarocks/rocks
dkjson
2.5-2 (installed) - /usr/lib/luarocks/rocks
lua-term
0.3-1 (installed) - /usr/lib/luarocks/rocks
lua_cliargs
2.5-5 (installed) - /usr/lib/luarocks/rocks
luafilesystem
1.6.3-1 (installed) - /usr/lib/luarocks/rocks
luasocket
3.0rc1-2 (installed) - /usr/lib/luarocks/rocks
luassert
1.7.9-0 (installed) - /usr/lib/luarocks/rocks
mediator_lua
1.1.2-0 (installed) - /usr/lib/luarocks/rocks
penlight
1.3.2-2 (installed) - /usr/lib/luarocks/rocks
say
1.3-1 (installed) - /usr/lib/luarocks/rocks

サンプルテストコードの作成

今回は function を定義している別の Lua スクリプトを busted でテストしてみたいと思います

  • sample_function.lua
function sum(a, b)
  return a + b
end

とりあえず引数の値を足しあわせて返却する簡単なメソッドを定義しておきます
これをテストするテストコードを作成します

  • sample_busted.lua
require 'busted.runner'()

require("sample_function")

describe("sum method test", function()
  it("is three", function()
    local val = sum(1, 2)
    assert.are.equal(val, 3)
  end)
end)

describe("sum method test2", function()
  it("is occured error", function()
    local val = sum(1, 2)
    assert.are.equal(val, 4)
  end)

  it("is not three", function()
    local val = sum(1, 2)
    assert.are_not.equal(val, 4)
  end)
end)

テスト冒頭で require 'busted.runner'() することで busted のテストコードであることを明示します
次にテストしたい Lua スクリプトを require します

あとはテストを記載していきます
基本形は describe -> it -> assert でテストを記載していきます

describe はテストの説明を記載するためのメソッドで階層を持たせることもできます
describe 配下に it を定義します
具体的なテストコードは it 配下に記載します
1 つの describe 内に複数の it を記述することも可能です

実行してみる

では実行してみましょう
今回は作成した 2 つの Lua スクリプトは同一ディレクトリに存在することを想定しています

  • busted sample_busted.lua

結果は以下のようになると思います
2 つ目のテストはあえて失敗するテストにしています

●?●
2 successes / 1 failure / 0 errors / 0 pending : 0.000965 seconds

Failure → sample_busted.lua @ 13
sum method test2 is occured error
sample_busted.lua:15: Expected objects to be equal.
Passed in:
(number) 4
Expected:
(number) 3

サンプルの結果だと色はないですが、失敗か成功かを丸と色で表示してくれます
成功した場合は緑になります
失敗したテストは結果と期待値を表示してくれます
あとはテストにかかった時間を表示してくれます

参考サイト

0 件のコメント:

コメントを投稿