1. 程式人生 > >Lua Busted 單元測試簡介(Windows 環境)

Lua Busted 單元測試簡介(Windows 環境)

簡介

本文目標是在 Windows 環境下使用 Busted 進行 Lua 單元測試。

Busted 是一款 BDD 風格的 Lua 單元測試框架,支援 TAP 風格輸出。

環境

  • Lua 5.3.5
  • LuaRocks 3.0.2
  • Microsoft Windows 10 企業版 10.0.14393 版本 14393

環境配置

  1. 安裝 LuaRocks,參照 Windows 平臺 Luarocks 3.0.2 編譯安裝
  2. luarocks install busted 等待安裝完成即可。
  3. 可能需要修改一下 busted.bat 檔案以使 busted 可以找到測試檔案同目錄下的模組。參見
    Windows下 lua busted 找不到 module 解決辦法

使用方法

busted 執行提供的 lua 指令碼中的測試並給出測試結果。測試風格是 describe-it 式的,可以當做句子來讀。具體語法請檢視官方說明。

示例

待測試模組,儲存為 sample_module.lua:

-- sample_module.lua
local sample_module = {}
function sample_module.greet( ... )
    print("hello")
end
return sample_module

測試程式碼,儲存為 busted-simple.lua

與上述程式碼放在同一目錄:

-- busted-simple.lua
describe("Busted unit testing framework", function()
    describe("should be awesome", function()
      it("should be easy to use", function()
        print(package.path)
        assert.truthy("Yup.")
      end)
  
      it("should have lots of features", function()
        -- deep check comparisons!
        assert.are.same({ table = "great"}, { table = "great" })
  
        -- or check by reference!
        assert.are_not.equal({ table = "great"}, { table = "great"})
  
        assert.truthy("this is a string") -- truthy: not false or nil
  
        assert.True(1 == 1)
        assert.is_true(1 == 1)
  
        assert.falsy(nil)
        assert.has_error(function() error("Wat") end, "Wat")
      end)
  
      it("should provide some shortcuts to common functions", function()
        assert.are.unique({{ thing = 1 }, { thing = 2 }, { thing = 3 }})
      end)
  
      it("should have mocks and spies for functional tests", function()
        local thing = require("sample_module")
        spy.on(thing, "greet")
        thing.greet("Hi!")
  
        assert.spy(thing.greet).was.called()
        assert.spy(thing.greet).was.called_with("Hi!")
      end)
    end)
  end)

使用命令列在上述檔案所在目錄執行命令 busted busted-simple.lua,得到結果:

./src/?.lua;./src/?/?.lua;./src/?/init.lua;.\?.lua;C:\local\LuaRocks-3.0.2\systree/share/lua/5.3/?.lua;C:\local\LuaRocks-3.0.2\systree/share/lua/5.3/?/init.lua;%LUA_PATH%
鈼忊棌鈼廻ello
鈼
4 successes / 0 failures / 0 errors / 0 pending : 0.016 seconds

可以看到四個測試都通過了。(亂碼先忽略吧,應該是官方沒有做好 utf-8 輸出處理,但是核心測試功能是 ok 的)。

參考