Создание эталонных тестовых файлов из тестовых случаев CPUnit для спецификации

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

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

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++ (мнения приветствуются).

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

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

Мы будем очень признательны за любой вклад.


person mb.frydman    schedule 03.05.2013    source источник
comment
Что вы хотите хранить в этих файлах, опять же?   -  person Adrian Panasiuk    schedule 03.05.2013
comment
Будет ли полезен Boost.Serialization?   -  person Jan Hudec    schedule 03.05.2013
comment
В файлах я хочу хранить входные данные и выходные данные каждого преобразования, в данном случае x и z. таким образом, когда это реализуется повторно, легко убедиться, что все правильно. Сериализация не совсем соответствует моим потребностям здесь.   -  person mb.frydman    schedule 03.05.2013


Ответы (1)


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

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

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

person John Deters    schedule 03.06.2013