WoW wowUnit framework аддон Shadowlands/Burning Crusade Classic 2021 скачать
logo
wow addon wowUnit framework

wowUnit framework

Версия игры: 8.2.0
Всего загрузок: 205
Обновлено: Jul 15, 2019
Создано: Dec 3, 2018
Скачать wowUnit frameworkСкачать Предыдущие версии

Предыдущие версии

Название Размер Обновлено Версия игры Загрузок
wowUnit 5.2 release 113.82 KB Jul 15, 2019 8.2.0 117 скачать wowUnit framework wowUnit 5.2 releaseСкачать
wowUnit 5.1 release 113.82 KB Dec 15, 2018 8.1.0 +1 64 скачать wowUnit framework wowUnit 5.1 releaseСкачать
wowUnit 5 release 114.82 KB Dec 3, 2018 8.0.1 24 скачать wowUnit framework wowUnit 5 releaseСкачать

Описание

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» в игре.

Поделиться:

Комментарии

Add a comment