Модель DataProvider для тестирования Lua - PullRequest
0 голосов
/ 26 февраля 2019

Я хотел предоставить модель провайдера данных для тестирования 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...