Поделиться через


Общие сведения о расширении генераторов данных

Для создания значимых для тестирования данных можно воспользоваться Visual Studio Premium или Visual Studio Ultimate. С помощью встроенных генераторов данных можно создавать случайные данные, создавать данные, используя существующие источники данных, и контролировать многие аспекты создания данных. Если функциональности встроенных генераторов данных недостаточно, можно создать настраиваемые генераторы данных. Для создания пользовательских генераторов данных используются классы из пространства имен Microsoft.Data.Schema.Tools.DataGenerator.

API расширяемости генератора данных

API расширяемости предоставляет классы, которые могут наследоваться разработчиками. В дополнение к классам данный API включает атрибуты, которые можно применять к производным классам. Применение этих атрибутов позволяет сократить количество кода, требующегося в пользовательских генераторах для типичных ситуаций.

API расширяемости можно использовать для создания пользовательских генераторов данных тремя описанными ниже способами.

Расширяемость

Описание

Уровень сложности

Пример

Декларативная расширяемость

  • Создайте класс, производный от класса Generator.

  • Добавьте настраиваемые входные и выходные свойства с помощью атрибутов InputAttribute и OutputAttribute.

Легко

Встроенный генератор целочисленных данных

Нормальная расширяемость

Средне Данный метод рекомендуется использовать в большинстве случаев.

Пошаговое руководство. Создание пользовательского генератора данных

Пошаговое руководство. Создание пользовательского генератора данных для проверочного ограничения

Базовая расширяемость

  • Создайте класс, реализующий интерфейс IGenerator.

  • Реализуйте все методы, необходимые генератору.

  • Создайте пользовательский конструктор для генератора, реализующего интерфейс IDesigner.

  • Реализуйте все методы, необходимые конструктору.

Сложно

Отсутствует

Базовая расширяемость

API базовой расширяемости — это механизм, с помощью которого осуществляется взаимодействие между ядром создания данных и конструкторами для планов создания данных. Этот API разработан в соответствии со следующими целями.

  • Надежность – для обеспечения согласованной и надежной реализации в ядре времени разработки и ядре времени выполнения.

  • Гибкость – для поддержки сложных генераторов, таких как генераторы с привязкой к данным.

Для того чтобы достичь этих целей, разработчикам базового API расширяемости пришлось сделать более сложным, чем высокоуровневый декларативный API расширяемости.

Регистрация пользовательских генераторов данных

Перед использованием пользовательского генератора данных его необходимо зарегистрировать на компьютере. Если пользовательский генератор данных передается для использования другим людям, его необходимо регистрировать на их компьютерах.

Регистрацию пользовательских генераторов данных можно выполнять следующими способами.

Метод

Требуемые разрешения

Пример

Зарегистрируйте генератор в папке Extensions.

Опытный пользователь или выше.

Создайте для регистрации генератора проект развертывания.

Администратор

  • Отсутствует

Генераторы данных, распределения и конструкторы

Можно создавать пользовательские генераторы данных и пользовательские конструкторы для этих генераторов. Также можно создавать пользовательские распределения для генераторов числовых данных и пользовательские конструкторы для этих распределений.

  • Пользовательские генераторы создают случайные тестовые данные согласно заданному набору правил. С этими генераторами можно использовать конструктор по умолчанию или же создать для них пользовательский конструктор, производный от класса DefaultGeneratorDesigner. Например, генератор регулярных выражений является встроенным генератором, однако использует пользовательский конструктор, благодаря чему может выполнять настраиваемую проверку пользовательского ввода во время разработки.

  • Используя пользовательский конструктор генератора можно настроить способ извлечения входных и выходных свойств от пользователя, задать значения по умолчанию и определить поведение проверки.

  • Используя пользовательское распределение, можно управлять распределением числовых значений, создаваемых генератором данных.

  • Пользовательские конструкторы распределений управляют поведением пользовательских распределений во время разработки. Это поведение включает получение имен входных свойств для распределения, задание значений по умолчанию входных свойств и проверку значений входных свойств для распределения.

Генераторы данных и локализация

Генераторы данных, входящие в состав Visual Studio Premium и Visual Studio Ultimate локализованы, поскольку существуют версии Visual Studio на различных языках. Пользовательские генераторы данных обычно локализовать не нужно. Если же требуется создать генератор данных, который будет локализован, следует создать пользовательский конструктор. Можно также переопределить метод GetInputs для локализации имен входных свойств.

Примечание

В случае необходимости наследовать класс DefaultGeneratorDesigner не реализуйте интерфейс IDesigner, чтобы избежать выполнения лишней работы.

Создание экземпляров генератора данных

Пользовательские генераторы данных могут использовать данные совместно. Областью совместных данных является тип генератора и таблица базы данных. У каждого генератора есть уникальный словарь экземпляров для каждой таблицы базы данных. Например, пользовательский генератор для таблицы с именем Customers имеет доступ к общему словарю. Можно поместить в этот словарь любую информацию и совместно ее использовать. Данный словарь гарантированно является одним и тем же экземпляром для каждого типа генератора и таблицы. Например, можно создать пользовательский генератор данных и запросить словарь из GeneratorInit. Затем можно проверить, содержит ли этот словарь совместно используемую информацию. Если да, можно использовать эту информацию для создания данных. Можно также создать общую информацию, которую смогут использовать другие экземпляры генератора.

Примечание

Создание экземпляров генератора — это сложная задача.К созданию экземпляров генератора можно прибегнуть для создания пользовательского генератора данных, обрабатывающего проверочные ограничения в разных столбцах – например, проверочное ограничение, требующее, чтобы один столбец был больше другого.

Процесс создания данных

Создание данных происходит в несколько этапов, которые описаны ниже.

Определение типа конструктора

Во время разработки

На этом этапе в качестве входных данных требуется тип генератора данных. Затем ядро может запросить GeneratorAttribute для извлечения типа конструктора. Чаще всего GeneratorAttribute наследуется от базового класса, определяющего конструктор по умолчанию.

Создание и инициализация экземпляра конструктора

Во время разработки

Создается экземпляр конструктора. Экземпляр конструктора создается путем вызова метода Initialize и передачи ему типа генератора в качестве аргумента.

Извлечение дескрипторов ввода

Во время разработки

Объект InputDescriptor извлекается из конструктора. Конструктор по умолчанию делает это путем извлечения всех свойств генератора данных, помеченных атрибутом InputAttribute.

Определение значений по умолчанию

Во время разработки

Задаются значения по умолчанию.

Получение описаний вывода генератора

Во время разработки

Объект OutputDescriptor извлекается из конструктора. Конструктор по умолчанию использует свойства, помеченные с использованием OutputAttribute, для создания описаний, отображаемых в столбце Выходные данные генератора в окне Сведения о столбцах.

Создание экземпляра генератора

На этапе выполнения

Экземпляр генератора данных создается с использованием конструктора по умолчанию.

Определение входных данных генератора

На этапе выполнения

Все входные значения задаются в генератора данных из дескрипторов ввода, извлекаемых из конструктора.

Проверка генератора

На этапе выполнения

вызывается метод ValidateInputs. Если проверка завершается неудачей, генератор выбрасывает исключение InputValidationException. Любые исключения, отличные от исключения проверки данных, интерпретируются как неисправимая ошибка.

Инициализация генератора

На этапе выполнения

вызывается метод Initialize. Этот шаг позволяет генератору данных выполнить необходимую настройку перед созданием данных, такую как указание строки подключения для целевой базы данных или инициализация генератора случайных чисел. Этот этап происходит единожды перед созданием данных.

Запуск генератора данных

На этапе выполнения

На этом этапе генерируются новые результаты с помощью вызова метода GenerateNextValues. Результаты можно извлечь с помощью метода GetOutputValue. Этот метод извлекает из генератора скалярное значение, соответствующее выходному ключу, передаваемому генератору в качестве входных данных. На этом этапе выполняется итерация по результатам, пока не будут сгенерированы все необходимые результаты.

Очистка

На этапе выполнения

Когда все данные созданы, вызывается метод Dispose для очистки генератора.

См. также

Задачи

Практическое руководство. Создание пользовательских генераторов данных

Пошаговое руководство. Создание пользовательского генератора данных

Ссылки

Microsoft.Data.Schema.DataGenerator

Основные понятия

Создание специализированных тестовых данных с помощью пользовательского генератора данных