2013-05-03 2 views
1

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

У меня есть несколько тестовых случаи, которые проверяют, что данные получают вперед и назад трансформируется правильно, что-то вроде:

void test(){ 
    int x[maxTest], y[maxTest], z[maxTest]; 
    fillRandomly(x, testSize); 

    MyTransform trans = MyTransform(testsize); 

    trans.apply(x, testSize, y); 
    trans.remove(y, testSize, z); 

    for(int i = 0; i < testSize; i++) 
     CPPUNIT_ASSERT(abs(x[i] - z[i]) < 2); 
} 

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

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

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

Исходя из Java, интроспекция приходит в голову с помощью обертки для решения некоторых из моих проблем (автоматическое присвоение тестовых выходных файлов ...), но не все, и мне было рекомендовано держаться подальше от него на C++ (мнения приветствуются).

Общепринятые методы применения/удаления также кажутся хорошим кандидатом, но не будут такими легкими, поскольку нет абстрактного типа преобразования и небольшого соответствия между преобразованиями (может быть, это хороший вариант, поскольку не так много типов трансформирует).

Так что мне интересно, должен ли кто-нибудь из вас сделать что-то подобное и как вы его решили. Я не возражаю изменить все тестовые примеры, если это означает, что у меня может быть что-то чистое.

Любой вход был бы очень признателен.

+0

Что вы хотите сохранить в этих файлах снова? –

+0

Может ли использоваться [Boost.Serialization] (http://www.boost.org/libs/serialization/doc/index.html)? –

+0

В файлах я хочу хранить входные данные и выходные данные каждого преобразования, в этом случае x и z. таким образом, когда это переопределяется, легко убедиться, что все правильно. Сериализация на самом деле не соответствует моим потребностям. –

ответ

0

То, что вы описали, на самом деле не является единичным тестом, поэтому CppUnit, пожалуй, не лучший выбор.

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

Рассмотрите возможность упрощения его использования в трех тестовых приложениях: набор тестов CppUnit, который выполняет только модульные тесты (и эти тесты не должны иметь ничего общего с файлами тестовых данных); генератор тестовых данных; и тестер трансформации. Каждый раз, когда вы строите, вы должны запускать автоматические модульные тесты. Когда вы запускаете генератор данных, вы должны автоматизировать выполнение тестера по выводимым данным, чтобы обеспечить получение хороших данных. Затем вы можете доставлять своим клиентам проверенные данные и приложение тестера.

Смежные вопросы