Предыдущие версии
| Название | Размер | Обновлено | Версия игры | Загрузок | |
| 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» в игре.
Получить 0.05 TON 💎
Скачать


Добавить комментарий