lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


Hi, guys, I'm using lunit and lemock to test my code,
Here is the situation: the function I should mock is in the same module of the function I'm testing.
Below is the code I write.

foo.lua
---------------------------------------------------------------------------------------------------------------
local M = {}
function M.dowork_internal(a, b)
    return global_function(a, b)
end
function M.dowork(a, b)
    return M.dowork_internal(a, b)
end
return M


test.lua
---------------------------------------------------------------------------------------------------------------
require("lunit")
lunit.setprivfenv()
lunit.import "assertions"
lunit.import "checks"

require("lemock")

local ut = lunit.TestCase("module test")
function ut:setup()
    self.mc                       = lemock.controller()
    self.mock_dowork_internal     = self.mc:mock()
end
function ut:test_normal()
    local vala     = 1
    local valb     = 2
    self.mock_dowork_internal(vala, valb); self.mc:returns(2)
    self.mc:replay()

    package.path   = "./?.lua;"..package.path
    local foo = require("foo")

    package.loaded.foo.dowork_internal       = nil
    package.preload["foo.dowork_internal"]   = function()
        return self.mock_dowork_internal
    end

    local val = foo.dowork(vala, valb)
    assert_equal(val, 2)

    self.mc:verify()
end
lunit.run()

I'm stuck with it for days. I'd really appriciate if someone kind could help. Thanks in advance.