2017-06-06 54 views
1

我想使用Busted爲現有lua文件編寫單元測試。我想在測試過程中換出一些方法,以便文件可以使用模擬/存根方法而不是真正的方法運行(否則將失敗)。一些文件調用的方法從其他lua庫中提取,我也想嘲笑這些。模擬測試期間現有lua文件中的模擬方法

這是如何實現的?

任何幫助表示讚賞,謝謝。

回答

1

我不認爲你可以很容易地替換本地函數,但它很直接取代導出或全局函數。

例如,我需要通過rest.http庫中的http:new().request(...)模擬HTTP調用。這是我在測試中所做的:

local http = require 'resty.http' 
http.new = function() 
    return { 
    request = function(self, args) 
     -- ... some mock implementation 
    end 
    } 
end 

這種方法應該適用於任何導出的函數。例如,要從庫bar替換函數foo

local bar = require 'bar' 
bar.foo = myMockImpl 

改變全局函數或變量可以通過覆蓋_G來實現,例如,這將改變全局函數或變量foo

_G.foo = ... 

破獲支持自動恢復環境。在documentation中搜索「絕緣」。