Я хотел предоставить модель провайдера данных для тестирования lua, аналогично тому, как работает модель Java @DataProvder
.Это моя текущая реализация, и я хотел бы услышать о предложениях / улучшениях:
-- The dataProvider HOF
_G.dataProvider = function(test, ...)
local arg = {...}
local data = {}
local provider = arg[1]
if #arg == 1 then
if type(provider) == 'table' then
data = provider
elseif type(provider) == 'function' then
data = provider()
else
error('Unsupported type ' .. type(provider) .. ' provided')
end
else
data = arg
end
for _, value in pairs(data) do
test(table.unpack(value))
end
end
И тесты будут:
-- data provider as a function:
describe('test-file', function()
-- Provider as a function
local provider = function()
return {
{'expected-result1', 'arg1a', 'arg1b'},
{'expected-result2', 'arg2a', 'arg2b'},
...
}
end
dataProvider(function(expected, arg1, arg2)
it('should run a test', function()
assert.are.equal(expected, testFile.testMethod(arg1, arg2))
end)
end, provider)
end)
-- data provider as a table
describe('test-file', function()
local provider = {
{'expected-result1', 'arg1a', 'arg1b'},
{'expected-result2', 'arg2a', 'arg2b'},
...
}
dataProvider(function(expected, arg1, arg2)
it('should run a test', function()
assert.are.equal(expected, testFile.testMethod(arg1, arg2))
end)
end, provider)
end)
-- data provider inline as variable arguments
describe('test-file', function()
dataProvider(function(expected, arg1, arg2)
it('should run a test', function()
assert.are.equal(expected, testFile.testMethod(arg1, arg2))
end)
end, {'expected-result1', 'arg1a', 'arg1b'}, {'expected-result2', 'arg2a', 'arg2b'}, ...)
end)