ИССЛЕДУЕМАЯ ФУНКЦИЯ
Тестирование транзакции 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, команды тестирование транзакции снабжаются специальным индикатором строки символов//#
. - Файлы базовой линии с расширением
*.exp
extension. Эти базовые файлы будут созданы пустыми при первом запускеaptos
CLI. Если вы запустите тест с опцией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
. - Запустите команду
aptos
CLI с опциейmove transactional-test
ИСПОЛЬЗОВАТЬ UB=1
При запуске командыaptos
CLI убедитесь, что вы включили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_handle
5713946181763753045826830927579154558
. -
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)