bustedで、Luaのユニットテストを試してみる

この記事の概要

busted を使ったユニットテストを試したメモです。
まだ、使いこなせていないのですが、
簡易に実行する程度までには至ったため一旦書き留めておきます。

busted とは

Olivine-Labsによって公開されているLuaユニットテストツールです。
MITライセンスです。

ドキュメント:

ソース:

実行環境のつくりかた

ドキュメントには、

busted works with lua >= 5.1, moonscript, terra, and LuaJIT >= 2.0.0.

と記載されていました。

Lua、LuaJITの実行環境を整えたのちに、

Ubuntu18.04、CentOS7の場合は下記でセットアップできました。

(環境によっては、途中で足りないパッケージがあり、コンパイル失敗したので、適宜インストールしました。)

【Ubuntuの場合】
# apt-get install -y luarocks
# luarocks install busted
# luarocks install luacov

【CentOS7の場合】
# yum install -y luarocks
# luarocks install busted
# luarocks install luacov

簡易なユニットテストを用意する

 今回は、テスト対象の関数のあるファイルと、別にテストシナリオだけを書いたファイルを分けてみました。

-- テスト対象の関数のあるファイル
-- /etc/nginx/lua/process.lua


-- テスト対象の関数 その1
function is_match(a, b)
if a == b then
return true
end
return false
end

-- テスト対象の関数 その2
function sum(a, b)
return a + b
end

 

-- ユニットテスト
-- ~/unit_test/test.lua

-- 今回はdofileで関数を読み込みました
dofile("/etc/nginx/lua/process.lua")

-- describeでブロックをネストして、グループ毎に実行できるようにハッシュタグ(#)付けします
describe("all test", function()

-- #match とタグ付けし、このブロックのみの実行が -t match でできるようにします
describe("is_match test #match", function()
-- it内に1つのシナリオをかきます
it("is_match 1 & 1 => true", function()
-- is_true(判定) で判定の内容がtrueだとテスト成功
assert.is_true(is_match(1,1) == true)
end)

-- わざと失敗させてみます
it("is_match 1 & 2 => true(false)", function()
assert.is_true(is_match(1,2) == true)
end)
end)

-- #sum とタグ付けし、このブロックのみの実行が -t sum でできるようにします
describe("sum test #sum", function()
it("sum 1 & 2 => false", function()
assert.is_true(sum(1,2) == 3)
end)
it("sum 10 & 20 => false", function()
assert.is_true(sum(10,20) == 30)
end)
end)

end)

 

テストを実行してみる

sumタグを実行

# busted test.lua -t sum
●●
2 successes / 0 failures / 0 errors / 0 pending : 0.00159 seconds

⇒ 2シナリオとも sucess になりました。

 

 matchタグ実行

# busted test.lua -t match
●?
1 success / 1 failure / 0 errors / 0 pending : 0.001331 seconds


Failure → test.lua @ 19
all test is_match test #match is_match 1 & 2 => true(false)
test.lua:20: Expected objects to be the same.
Passed in:
(boolean) false
Expected:
(boolean) true

 ⇒ どのブロックのどのシナリオで失敗しているか確認できます。

 

全件実行

# busted test.lua
●?●●
3 successes / 1 failure / 0 errors / 0 pending : 0.001995 seconds

Failure → test.lua @ 19
all test is_match test #match is_match 1 & 2 => true(false)
test.lua:20: Expected objects to be the same.
Passed in:
(boolean) false
Expected:
(boolean) true

 ⇒ 同上。

 

簡単な使い方のメモでした。
判定方法やエラー出力など柔軟にできるようですので、
使いこなせるようになった際には、別途紹介したいと思います。