ИССЛЕДУЕМАЯ ФУНКЦИЯ
Тестирование транзакции Move, описанной в этом документе, находится на стадии разработки. Поддержка этой функции будет зависеть от ее использования и принятия сообществом Aptos.
Если вы являетесь разработчиком смарт-контрактов на языке Move, то вы можете использовать тестирование транзакции Move для создания и запуска end-to-end тестов.
В этом руководстве описаны шаги по созданию и запуску end-to-end тестированию транзакции Move с помощью Aptos CLI.
По сравнению с модульными тестами Move, которые полезны для проверки корректности внутримодульного кода, тестирование транзакции Move позволяет тестировать более широкий спектр вариантов использования, таких как публикация модулей Move и межмодульное взаимодействие.
Обзор
Как выглядит тестирование транзакции Move, смотрите в папке aptos_test_harness GitHub.
Набор для тестирования транзакции Move состоит из двух типов файлов:
- Файлы Move с расширением
*.move. Эти файлы Move содержат тестирование транзакции. Тестирование транзакции - это команды Rust clap (Command Line Argument Parser). Они записываются в виде символов в файлах Move. Чтобы отличить их от обычных символов Move, команды тестирование транзакции снабжаются специальным индикатором строки символов//#. - Файлы базовой линии с расширением
*.expextension. Эти базовые файлы будут созданы пустыми при первом запускеaptosCLI. Если вы запустите тест с опциейUB=1в первый раз, файлы базовой линии будут заполнены результатами теста.
Быстрый запуск
Прежде чем вникать в детали, вы можете выполнить следующие шаги, чтобы запустить образец для тестирования транзакции Move и посмотреть результаты.
Шаг 1. Установите Aptos CLI
Убедитесь, что вы установили aptos , инструмент Aptos CLI. Как установить и использовать инструмент aptos CLI, смотрите 👇 .
Шаг 2. Запустите набор тестов Move transactional test suite
- Клонируйте или загрузите репозиторий
aptos-coreна GitHub. - Набор тестов Move transactional находится в
aptos-core/aptos-move/aptos-transactional-test-harness/test. - Запустите команду
aptosCLI с опциейmove transactional-test
ИСПОЛЬЗОВАТЬ UB=1
При запуске командыaptosCLI убедитесь, что вы включилиUB=1только в первый раз или если вы обновили тесты, как показано ниже.
UB=1 aptos move transactional-test --root-path aptos-core/aptos-move/aptos-transactional-test-harness/test
- Параметр
--root-pathуказывает, где находятся все тесты. - Запуск теста проходит по иерархии каталогов и находит тесты, указанные в виде символов со специальным префиксом
//#, в файлах, имена которых заканчиваются на.moveили.mvir. - Программа тестирование транзакции Move запускает тесты и сравнивает результаты тестов с базовыми файлами. В базовых файлах хранится содержимое результатов, которые были получены во время первого запуска.
Примеры
В этом разделе представлены примеры, показывающие, как создать и запустить различные команды для тестирования транзакции Move.
Создание учетной записи
//# create_account —name Alice [--initial-coins 10000]
Команда create_account генерирует детерминированную пару закрытый ключ, открытый ключ и создает именованный адрес учетной записи (Alice в приведенном выше примере).
ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ
Начальные coins могут быть заданы, в противном случае используется значение по умолчанию 10000.
Публикация модулей
//# publish [--gas-budget 100]
module Alice::first_module {
public entry fun foo() {
return
}
}
Команда publish публикует модуль Move на указанную учетную запись (Alice в приведенном выше примере). По желанию, количество единиц газа, разрешенное для публикации транзакции, может быть указано через --gas-budget.
ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ
Значение по умолчанию - это максимальное количество coins, доступное на учетной записи отправителя.
Запуск функций скрипта модуля
//# run --signers Alice [--args x"68656C6C6F20776F726C64"] [--type-args "0x1::aptos_coin::AptosCoin"] [--expiration 1658432810] [--sequence-number 1] [--gas-price 1] [--show-events] -- Alice::first_module::function_name
Команда run запускает функцию скрипта модуля путем отправки транзакции.
В приведенном выше примере:
-
--signersуказывают, кто подписывает и отправляет транзакцию. -
Alice::first_module::function_name- полное имя функции модуля Move. -
--argsуказывают аргументы, которые нужно передать скрипт-функции. -
--type-argsуказывает аргументы типа, если скрипт-функция является родовой функцией. -
--expiration- время истечения срока действия транзакции. -
--sequence-numberномер последовательности учетной записи. -
--gas-priceцена единицы газа. -
--show-eventsвыводит события транзакции, если они указаны.
Выполнение скриптов
//# run --script --signers Alice [--args x"68656C6C6F20776F726C64"] [--type-args "0x1::aptos_coin::AptosCoin"] [--expiration 1658432810] [--sequence-number 1] [--gas-price 1]
script {
use aptos_framework::coin;
use aptos_framework::aptos_coin::AptosCoin;
fun main(sender: &signer, receiver: address, amount: u64) {
coin::transfer<AptosCoin>(sender, receiver, amount);
}
}
Команду run можно также использовать с опцией --script для выполнения скрипта.
Просмотр ресурсов
//# view_resource --address Alice --type 0x1::coin::CoinStore<0x1::test_coin::TestCoin> [--field coin.value]
View_resource выводит ресурсы, содержащиеся по адресу.
-
--addressучетной записи, чьи ресурсы должны быть опубликованы. -
--typeтип ресурса, который должен быть опубликован. -
--fieldпубликует только указанное поле.
Просмотр таблиц
//# view_table --table_handle 5713946181763753045826830927579154558 --key_type 0x1::string::String --key_value x"68656C6C6F20776F726C64" --value_type 0x1::token::Collection
View_table выводит элемент в таблице по ключу элемента. Например, в приведенном ниже коде Move:
struct Collections has key {
collections: Table<string::String, Collection>,
}
- В хранилище таблица
collectionsимеет handle, хранящийся в ресурсеCollections. - Чтобы запросить элемент таблицы по ключу, нам необходимо знать информацию о handle таблицы
--table_handle5713946181763753045826830927579154558. -
table_handle- это handle таблицы, к которой выполняется запрос. Он может быть найден командойview_resource. - Параметр
--key_type- это информация о типе ключа. Чтобы получить значение ключа, используйте опциюview_tableс параметрами--key_typeи--key_value. - Значение
--key_value- это ключ, который используется для получения значения. -
Key_typeиспользуется для десериализацииkey_valueдля получения необработанного ключа, который может быть использован для запроса к хранилищу. - Параметр
--value_type- информация о типе для десериализации значения таблицы. Возвращаемое значение хранилища также должно быть десериализовано, чтобы быть полезным. Поэтому--value_typeтакже необходим.
Top comments (0)