DEV Community

EgorMajj
EgorMajj

Posted on

Руководство по тестированию транзакций Move

ИССЛЕДУЕМАЯ ФУНКЦИЯ
Тестирование транзакции 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
Enter fullscreen mode Exit fullscreen mode
  • Параметр --root-path указывает, где находятся все тесты.
  • Запуск теста проходит по иерархии каталогов и находит тесты, указанные в виде символов со специальным префиксом //#, в файлах, имена которых заканчиваются на .move или .mvir.
  • Программа тестирование транзакции Move запускает тесты и сравнивает результаты тестов с базовыми файлами. В базовых файлах хранится содержимое результатов, которые были получены во время первого запуска.

Примеры

В этом разделе представлены примеры, показывающие, как создать и запустить различные команды для тестирования транзакции Move.

Создание учетной записи

//# create_account —name Alice [--initial-coins 10000]
Enter fullscreen mode Exit fullscreen mode

Команда create_account генерирует детерминированную пару закрытый ключ, открытый ключ и создает именованный адрес учетной записи (Alice в приведенном выше примере).

ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ
Начальные coins могут быть заданы, в противном случае используется значение по умолчанию 10000.

Публикация модулей

//# publish [--gas-budget 100]
module Alice::first_module {
    public entry fun foo() {
        return
    }
}
Enter fullscreen mode Exit fullscreen mode

Команда 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
Enter fullscreen mode Exit fullscreen mode

Команда 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);
    }
}
Enter fullscreen mode Exit fullscreen mode

Команду run можно также использовать с опцией --script для выполнения скрипта.

Просмотр ресурсов

//# view_resource --address Alice --type 0x1::coin::CoinStore<0x1::test_coin::TestCoin> [--field coin.value]
Enter fullscreen mode Exit fullscreen mode

View_resource выводит ресурсы, содержащиеся по адресу.

  • --address учетной записи, чьи ресурсы должны быть опубликованы.
  • --type тип ресурса, который должен быть опубликован.
  • --field публикует только указанное поле.

Просмотр таблиц

//# view_table --table_handle 5713946181763753045826830927579154558 --key_type 0x1::string::String --key_value x"68656C6C6F20776F726C64" --value_type 0x1::token::Collection 
Enter fullscreen mode Exit fullscreen mode

View_table выводит элемент в таблице по ключу элемента. Например, в приведенном ниже коде Move:

struct Collections has key {
    collections: Table<string::String, Collection>,
}
Enter fullscreen mode Exit fullscreen mode
  • В хранилище таблица 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)