Предыдущие версии
Название | Размер | Обновлено | Версия игры | Загрузок | |
wowUnit 5.2 release | 113.82 KB | Jul 15, 2019 | 8.2.0 | 117 | Скачать |
wowUnit 5.1 release | 113.82 KB | Dec 15, 2018 | 8.1.0 +1 | 64 | Скачать |
wowUnit 5 release | 114.82 KB | Dec 3, 2018 | 8.0.1 | 24 | Скачать |
Описание
wowUnit-это фреймворк модульного тестирования, предназначенный для разработки аддонов в World of Warcraft, созданный компанией Mirroar и обновленный компанией Fulgerul. Я только намерен заставить его работать для последнего обновления WoW. Всю работу проделали Мирроар и Фулгерул, и именно их следует благодарить.
Пример
Допустим, у вас есть аддон под названием addAddOn, который просто имеет функцию сложения двух чисел. Вы можете написать тесты, чтобы убедиться, что функция работает так, как ожидалось, например:
addAddOn.тесты = { ["Проверка сложения чисел"] = { ["Посмотреть, верны ли результаты"] = функция() wowUnit:assertEquals(addAddOn:добавить(1, 1), 2, "1 а 1-2") wowUnit:assertEquals(addAddOn: add(-3, 5), 2, "-3 + 5 = 2") wowUnit:assertEquals(addAddOn: add(1997, -1995), 2, "1997 + (-1995) = 2") конец, ["убедитесь, что он ведет себя так, как ожидалось для странного ввода"] = функция() wowUnit:isNil(addAddOn:add (), " nil, когда параметры не заданы") wowUnit:isNil(addAddOn:add(1), " nil, когда задан только параметр on") wowUnit:isNil(addAddOn:add(nil, 1), " nil, когда задан только один параметр") wowUnit:assertEquals(addAddOn:add(-3, 5, 10), 2, "любые параметры после первых 2 игнорируются") wowUnit:isNil(addAddOn:add(1, "1"), " nil, когда параметр не является числом") конец } }
После того, как тесты написаны и загружены, вы можете запустить эти тесты в игре, набрав «/test addAddOn«.
Запуск Тестов
Вы можете легко запустить модульные тесты, содержащиеся в любой таблице, непосредственно доступной в глобальном пространстве имен, с помощью любой из следующих команд слеша:
/test myAddon /wowunit myOtherAddon /wu testTable /unittest testSuite
Если ваши тесты похоронены глубже в другой таблице, вам придется выполнить команду следующим образом:
/выполнения wowUnit:StartTests(myAddon.someTable.testSuiteIsHere)
Тестовые Таблицы
Анатомия тестового набора
заглавие
(необязательно) Название этого набора тестов, отображаемое в главном окне wowUnit
тесты
Таблица, содержащая категории тестов для этого набора тестов. Ключи любых записей в этой таблице служат заголовками для ваших категорий, в то время как их значения должны быть таблицами, содержащими фактические тесты.
Пример:
testTable = { название = "мои тесты", тесты = { ["Категория 1"] = { ... }, ["Другая Категория"] = { ... }, ... } }
Анатомия тестовой категории
установка
(необязательно) Определенная здесь функция будет вызываться перед каждым тестом в текущей категории.
демонтаж
(необязательно) Определенная здесь функция будет вызываться после каждого теста в текущей категории.
Любые другие функции, определенные в таблице, будут считаться тестами.
Пример:
... ["Пример Категории"] = { ["setup"] = функция() -- имитация сложной функции myAddon.oldFunc = myAddon.complicatedFunction; myAddon.complicatedFunction = функция() assert(true, " сложная функция была вызвана"); end end, ["teardown"] = функция() -- восстановление сложной функции myAddon.complicatedFunction = myAddon.oldFunc; конец, ["не дозвонились?"] = функция() wowUnit:ожидайте(1); myAddon.shouldCallTheOtherFunction(); конец, ... } ...
Утверждения
wowUnit:assert(значение, сообщение)
ценность
Этот тест пройдет тогда и только тогда, когда значение будет равно true в if (value) then … заявление.
сообщение
(необязательно) Это сообщение будет отображаться в окне теста, чтобы указать, какие тесты прошли или не прошли.
wowUnit:assertEquals(value1, value2, message)
значение1, значение2
Этот тест пройдет тогда и только тогда, когда value1 считается равным value2 в if (value1 == value2) then … заявление.
Примечание: Lua здесь не выполняет автоматического преобразования типов, поэтому 1 и «1» не равны. Кроме того, два табличных значения считаются равными только в том случае, если они ссылаются на одну и ту же таблицу. Две таблицы по разным адресам не считаются равными, даже если их содержимое одинаково.
сообщение
(необязательно) Это сообщение будет отображаться в окне теста, чтобы указать, какие тесты прошли или не прошли.
wowUnit:assertNonEquals(value1, value2, message)
значение1, значение2
Этот тест пройдет тогда и только тогда, когда value1 не считается равным value2 в if (value1 ~= value2) then … заявление.
Примечание: Lua здесь не выполняет автоматического преобразования типов, поэтому 1 и «1» не равны.
сообщение
(необязательно) Это сообщение будет отображаться в окне теста, чтобы указать, какие тесты прошли или не прошли.
wowUnit:assertSame(value1, value2, message)
значение1, значение2
Если какое-либо из двух значений не является таблицей, это будет вести себя точно так же, как wowUnit:assertEquals. При наличии двух таблиц будет выполнено рекурсивное сравнение, чтобы увидеть, является ли содержимое этих двух таблиц одинаковым.
сообщение
(необязательно) Это сообщение будет отображаться в окне теста, чтобы указать, какие тесты прошли или не прошли.
wowUnit:isNil(значение, сообщение)
ценность
Этот тест пройдет тогда и только тогда, когда значение будет равно нулю в if (type(value) == «nil») then … заявление.
сообщение
(необязательно) Это сообщение будет отображаться в окне теста, чтобы указать, какие тесты прошли или не прошли.
wowUnit:isEmpty(значение, сообщение)
ценность
Этот тест пройдет тогда и только тогда, когда значение является пустой таблицей или равно нулю в if (type(value) == «nil») then … заявление.
сообщение
(необязательно) Это сообщение будет отображаться в окне теста, чтобы указать, какие тесты прошли или не прошли.
wowUnit:организации с функциями, необходимыми(значение, сообщение)
ценность
Этот тест пройдет тогда и только тогда, когда значение будет равно таблице в if (type(value) == «table») then … заявление.
сообщение
(необязательно) Это сообщение будет отображаться в окне теста, чтобы указать, какие тесты прошли или не прошли.
wowUnit:isString(значение, сообщение)
ценность
Этот тест пройдет тогда и только тогда, когда значение будет равно строке в if (type(value) == «string») then … заявление.
сообщение
(необязательно) Это сообщение будет отображаться в окне теста, чтобы указать, какие тесты прошли или не прошли.
wowUnit:isNumber(значение, сообщение)
ценность
Этот тест пройдет тогда и только тогда, когда значение будет равно числу в if (type(value) == «number») then … заявление.
сообщение
(необязательно) Это сообщение будет отображаться в окне теста, чтобы указать, какие тесты прошли или не прошли.
wowUnit:isFunction(значение, сообщение)
ценность
Этот тест пройдет тогда и только тогда, когда значение будет равно функции в if (type(value) == «function») then … заявление.
сообщение
(необязательно) Это сообщение будет отображаться в окне теста, чтобы указать, какие тесты прошли или не прошли.
wowUnit:expect(numTests)
numTests
Это пройдет, если в ходе текущей тестовой функции будет выполнено число утверждений, равное numTests.
Примечание: Вы можете установить количество ожидаемых тестов в любое время во время тестовой функции. Он будет проверен только после завершения теста. Следующий тест, например, покажет два успешных утверждения.
["тест ожидания"] = функция() wowUnit:ожидайте(1); wowUnit:assert(true); end
Асинхронное Тестирование
Если вы хотите протестировать процессы, которые требуют некоторого времени для завершения и не блокируют основной поток, вам придется сказать wowUnit, чтобы он ждал дополнительных результатов, а не переходил к следующему тесту.
Пример:
["asynch test"] = функция() wowUnit:ожидайте(1); local testID = wowUnit:pauseTesting(10); местные timeElapsed = 0; локальный таймфрейм = CreateFrame ("фрейм"); таймфрейм: SetScript ("OnUpdate", function (self, elapsed) timeElapsed = timeElapsed + elapsed; -- Сколько секунд вы хотите заблокировать , если (timeElapsed > 5), то timeFrame:SetScript ("OnUpdate", nil); - не забудьте удалить такие проверки, иначе вы можете спамить утверждает каждый кадр -- Код для проверки результатов wowUnit:утверждать(myAddon.processCompleted, "все сделано"); -- Код для освобождения блока wowUnit:resumeTesting(testID); конец конец) -- Код, который вы хотите запустить myAddon:StartProcess (); end testID = wowUnit:pauseTesting(тайм-аут)
testID = wowUnit:pauseTesting(тайм-аут)
Приостановит выполнение новых тестов до тех пор, пока не будет достигнут тайм-аут или не будет вызван wowUnit:resumeTesting.
перерыв
(необязательно) Новые тесты не будут запускаться до тех пор, пока не будет достигнут этот тайм-аут (в секундах). Значение по умолчанию-5 секунд.
testID
Уникальный идентификатор для текущего запущенного теста, который будет использоваться с wowUnit: resumeTesting.
wowUnit:resumeTesting(testID)
Постараюсь возобновить нормальное тестирование на следующем кадре.
testID
(необязательно) Если это предусмотрено, тестирование будет возобновлено только в том случае, если предоставленный testID соответствует значению, возвращенному последним вызовом wowunit:pauseTesting.
А Что Еще?
Если вам нужны дополнительные идеи и примеры для тестов,ознакомьтесь с tests. lua wowUnit и сравните его с результатами запуска «/ test wowUnit» в игре.
Добавить комментарий