Руководство по тестированию для пользовательских хранилищ данных

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

Если вы разработали свой пользовательский datastore на основе инструкций в, Разрабатывают Пользовательский Datastore, то следуют за этими процедурами тестирования, чтобы квалифицировать ваш пользовательский datastore. Сначала выполните модульные тесты, сопровождаемые тестами рабочего процесса:

  • Модульные тесты квалифицируют конструктора datastore и методы.

  • Тесты рабочего процесса квалифицируют использование datastore.

Для всех этих тестов:

  • Если не задано в тестовом описании, примите, что вы тестируете непустой datastore ds.

  • Проверьте тесты на расширениях файла, кодировке файла и местоположениях данных (как Hadoop®), который ваш пользовательский datastore разработан, чтобы поддержать.

Модульные тесты

Конструкция

Инструкции по модульному тесту для конструктора datastore следующие.

Описание тестаОжидаемый Вывод

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

Объект Datastore вашего пользовательского типа хранилища данных с минимальными ожидаемыми свойствами и методами

Проверьте, имеет ли ваш объект ds datastore matlab.io.Datastore как один из его суперклассов.

Запустите эту команду:

isa(ds,'matlab.io.Datastore') 

1 или true

Вызовите своего пользовательского конструктора datastore с необходимыми входными параметрами и любыми поддерживаемыми входными параметрами и аргументами в виде пар "имя-значение".

Объект Datastore вашего пользовательского типа хранилища данных с минимальными ожидаемыми свойствами и методами

чтение

Инструкции по модульному тесту для метода read

Описание тестаОжидаемый Вывод

Вызовите метод read на объекте ds datastore.

t = read(ds);

Данные с начала datastore

Если вы задаете размер чтения, то размер возвращенных данных эквивалентен, чтобы считать размер.

Вызовите метод read снова на объекте datastore.

t = read(ds);

Данные, начинающие с конечной точки предыдущей операции чтения

Если вы задаете размер чтения, то размер возвращенных данных эквивалентен, чтобы считать размер.

Продолжите вызывать метод read на объекте datastore в некоторое время цикле.

while(hasdata(ds))
  t = read(ds);
end

Никакие ошибки

Правильные данные в правильном формате

Когда данные будут доступны в чтение, проверьте info вывод (если таковые имеются) метода read.

Вызовите объект ds datastore.

[t,info] = read(ds);

Никакая ошибка

info содержит ожидаемую информацию

t содержит ожидаемые данные

Когда больше данных не будет доступно в чтение, вызовите read на объекте datastore.

Или ожидаемый вывод или сообщение об ошибке на основе вашей пользовательской реализации datastore.

readall

Инструкции по модульному тесту для метода readall

Описание тестаОжидаемый Вывод

Вызовите метод readall на объекте datastore.

Все данные

Вызовите метод readall на объекте datastore, когда hasdata(ds) будет false.

Читайте из datastore, пока hasdata(ds) не является false, и затем вызовите метод readall.

while(hasdata(ds))
  t = read(ds);
end
readall(ds)

Все данные

hasdata

Инструкции по модульному тесту для метода hasdata

Описание тестаОжидаемый Вывод

Вызовите метод hasdata на объекте datastore прежде, чем выполнить любые вызовы к read

tRUE

Вызовите метод hasdata на объекте datastore после совершения нескольких звонков к read, но перед всеми данными читается

tRUE

Когда больше данных будет доступно в чтение, вызовите метод readall, и затем вызовите метод hasdata.

tRUE

Когда больше данных не будет доступно в чтение, вызовите метод hasdata.

ложь

сброс

Инструкции по модульному тесту для метода reset

Описание тестаОжидаемый Вывод

Вызовите метод reset на объекте datastore прежде, чем выполнить любые вызовы к методу read.

Проверьте, что метод read возвращает соответствующие данные после вызова метода reset.

reset(ds);
t = read(ds);

Никакие ошибки

read возвращает данные с начала datastore.

Если вы задаете размер чтения, то размер возвращенных данных эквивалентен, чтобы считать размер.

Когда больше данных будет доступно в чтение, вызовите метод reset после совершения нескольких звонков к методу read.

Проверьте, что метод read возвращает соответствующие данные после звонка методу reset.

Никакие ошибки

Метод read возвращает данные с начала datastore.

Если вы задаете размер чтения, то размер возвращенных данных эквивалентен, чтобы считать размер.

Когда больше данных будет доступно в чтение, вызовите метод reset после звонка методу readall.

Проверьте, что метод read возвращает соответствующие данные после звонка методу reset.

Никакие ошибки

Метод read возвращает данные с начала datastore.

Если вы задаете размер чтения, то размер возвращенных данных эквивалентен, чтобы считать размер.

Когда больше данных не будет доступно в чтение, вызовите метод reset на объекте datastore и затем вызовите метод read

Проверьте, что read возвращает соответствующие данные после вызова метода reset.

Никакие ошибки

Метод read возвращает данные с начала datastore.

Если вы задаете размер чтения, то размер возвращенных данных эквивалентен, чтобы считать размер.

прогресс

Инструкции по модульному тесту для метода progress

Описание тестаОжидаемый Вывод

Вызовите метод progress на объекте datastore прежде, чем выполнить любые вызовы к методу read.

0 или ожидаемый вывод на основе вашей пользовательской реализации datastore.

Вызовите метод progress на объекте datastore после звонка readall, но прежде, чем выполнить любые вызовы к read

readall(ds);
progress(ds)

0 или ожидаемый вывод на основе вашей пользовательской реализации datastore.

Вызовите метод progress на объекте datastore после совершения нескольких звонков к read и в то время как больше данных доступно в чтение.

Часть между 0 и 1 или ожидаемым выводом на основе вашей пользовательской реализации datastore.

Вызовите метод progress на объекте datastore, когда больше данных не будет доступно в чтение.

1 или ожидаемый вывод на основе вашей пользовательской реализации datastore.

предварительный просмотр

Инструкции по модульному тесту для метода preview

Описание тестаОжидаемый Вывод

Вызовите preview на объекте datastore прежде, чем выполнить любые вызовы к read.

Метод preview возвращает ожидаемые данные с начала datastore, на основе вашей пользовательской реализации datastore.

Вызовите preview на объекте datastore после совершения нескольких звонков к read и в то время как больше данных доступно в чтение.

Метод preview возвращает ожидаемые данные с начала datastore, на основе вашей пользовательской реализации datastore.

Вызовите preview на объекте datastore после звонка readall и в то время как больше данных доступно в чтение.

Метод preview возвращает ожидаемые данные с начала datastore, на основе вашей пользовательской реализации datastore.

Вызовите preview на объекте datastore после совершения нескольких звонков к read и вызова reset.

Метод preview возвращает ожидаемые данные с начала datastore, на основе вашей пользовательской реализации datastore.

Вызовите preview на объекте datastore, когда больше данных не будет доступно в чтение.

Метод preview возвращает ожидаемые данные с начала datastore, на основе вашей пользовательской реализации datastore.

Вызовите preview после совершения нескольких звонков к методу read и затем вызовите read снова.

Метод read возвращает данные, начинающие с конечной точки предыдущей операции чтения.

Если вы задаете размер чтения, то размер возвращенных данных эквивалентен, чтобы считать размер.

Вызовите preview, и затем вызовите readall на datastore.

Метод readall возвращает все данные в datastore.

В то время как datastore имеет доступные данные, чтобы читать, вызовите preview, и затем вызовите hasdata.

Метод hasdata возвращает true.

раздел

Инструкции по модульному тесту для метода partition

Описание тестаОжидаемый Вывод

Вызовите partition на объекте ds datastore с верным номером разделов и допустимого индекса раздела.

Вызовите read на разделе datastore и проверьте данные.

subds = partition(ds,n,index)
read(subds)

Проверьте, что раздел допустим.

isequal(properties(ds),properties(subds))
isequal(methods(ds),methods(subds))

Метод partition делит datastore в разделы n и возвращает раздел, соответствующий заданному index.

Возвращенный раздел subds должен быть объектом datastore вашего пользовательского datastore.

Разделенный datastore subds должен иметь те же методы и свойства как исходный datastore.

Оператор isequal возвращает true.

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

Если вы задаете размер чтения, то размер возвращенных данных эквивалентен, чтобы считать размер.

Вызовите partition на объекте ds datastore с количеством разделов, заданных как 1 и index возвращенного раздела, заданного как 1.

Проверьте данные, возвращенные путем вызова read и preview на разделе разделенного datastore.

subds = partition(ds,1,1)
isequal(properties(ds),properties(subds))
isequal(methods(ds),methods(subds))
isequaln(read(subds),read(ds))
isequaln(preview(subds),preview(ds))

Раздел subds должен быть объектом datastore вашего пользовательского datastore.

Раздел subds должен иметь те же методы и свойства как исходный datastore ds.

Операторы isequal и isequaln возвращают true.

Вызовите partition на разделе subds с верным номером разделов и допустимого индекса раздела.

Повторное разделение раздела datastore должно работать без ошибок.

initializeDatastore

Если ваш datastore наследовался matlab.io.datastore.HadoopFileBased, то проверьте поведение initializeDatastore с помощью инструкций в этой таблице.

Описание тестаОжидаемый Вывод

Вызовите initializeDatastore на объекте ds datastore с допустимым struct info.

Struct info содержит эти поля:

  • FileName

  • Offset

  • Размер

FileName имеет тип данных, char и поля Offset и Size имеют тип данных дважды.

Например, инициализируйте struct info, и затем вызовите initializeDatastore на объекте ds datastore.

info = struct('FileName','myFileName.ext',...
                       'Offset',0,'Size',500)
initializeDatastore(ds,info)

Проверьте инициализацию путем исследования свойств объекта datastore.

ds

Метод initializeDatastore инициализирует пользовательский объект ds datastore с необходимой информацией от struct info.

getLocation

Если ваш datastore наследовался matlab.io.datastore.HadoopFileBased, то проверьте поведение getLocation с помощью этих инструкций.

Описание тестаОжидаемый Вывод

Вызовите getLocation на объекте datastore.

location = getLocation(ds)

На основе вашей пользовательской реализации datastore location вывод имеет любой их:

  • Список файлов или каталогов

  • объект matlab.io.datastore.DsFileSet

Если location является объектом matlab.io.datastore.DsFileSet, то вызовите resolve, чтобы проверить файлы в location вывод.

resolve(location)

Метод getLocation возвращает местоположение файлов в Hadoop.

isfullfile

Если ваш datastore наследовался matlab.io.datastore.HadoopFileBased, то проверьте поведение isfullfile с помощью этих инструкций.

Описание тестаОжидаемый Вывод

Вызовите isfullfile на объекте datastore.

На основе вашей пользовательской реализации datastore метод isfullfile возвращает true или false.

Тесты рабочего процесса

Проверьте свои тесты рабочего процесса в соответствующей среде.

  • Если ваш datastore наследовался только matlab.io.Datastore, то проверьте все тесты рабочего процесса на локальном сеансе MATLAB®.

  • Если ваш datastore имеет поддержку параллельной обработки (наследовался matlab.io.datastore.Partitionable), то проверьте свои тесты рабочего процесса в параллельных средах выполнения, таких как Параллельные вычисления Toolbox™ и Распределенные вычисления MATLAB Server™.

  • Если ваш datastore основан на файле и сделал, чтобы Hadoop поддержал (наследовался matlab.io.datastore.HadoopFileBased), то проверьте свои тесты рабочего процесса в кластере Hadoop.

Высокий рабочий процесс

Тестирование инструкций для рабочего процесса tall

Описание тестаОжидаемый Вывод

Создайте длинный массив путем вызова tall на объекте ds datastore.

t = tall(ds)

Функция tall возвращает вывод, который является совпадающим типом данных как выводом метода read datastore.

Для этого тестового шага создайте объект datastore с данными, который помещается в вашу системную память. Затем создайте длинный массив с помощью этого объекта datastore.

t = tall(ds)

Если ваши данные являются числовыми, то примените соответствующую функцию как функция mean и к ds и к t, то сравните результаты.

Если ваши данные имеют тип данных string или categorical, то примените функцию unique на столбец ds и столбец t, то сравните результаты.

Примените gather и проверьте результат.

Для примеров смотрите, что Рабочий процесс Больших данных Использует Длинные массивы и Хранилища данных (Parallel Computing Toolbox).

Никакие ошибки

Функция возвращает вывод правильного типа данных (не типа данных tall).

Функция возвращает тот же результат, применяется ли это к ds или к t.

Рабочий процесс MapReduce

Тестирование инструкций для рабочего процесса MapReduce

Описание тестаОжидаемый Вывод

Вызовите mapreduce на объекте ds datastore.

outds = mapreduce(ds,@mapper,@reducer)
Для получения дополнительной информации смотрите mapreduce.

Чтобы поддержать использование функции mapreduce, метод read вашего пользовательского datastore должен возвратить и info и выходные аргументы data.

Никакая ошибка

Операция MapReduce возвращает ожидаемый результат

Следующие шаги

Примечание

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

После того, как вы завершите реализацию и валидацию вашего пользовательского datastore, ваш пользовательский datastore готов использовать.

Смотрите также

| |

Похожие темы

Была ли эта тема полезной?