C++, эквивалентный doctests Python?

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

9
задан Devin Jeanpierre 23 February 2009 в 07:11
поделиться

5 ответов

Я только что взглянул на doctest, это является действительно блестящим. Так подход простоты использования языка Python.

Для C++ однако, Вы, вероятно, не найдете такой инструмент.

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

Необходимо признать, что кодирование в C++ не как быстрое задание, как это находится в Python, таким образом, поблочное тестирование является так же несколько более трудным. С другой стороны, у Вас есть больше инструментов, можно поместить статические утверждения для отношений типа, например, который невозможен в Python.

Так кратко я думаю, что аналог Python doctest для C++ имел бы столько недостатков по сравнению с существующими инструментами, что никто не начал реализовывать его.

Если Вы действительно полагаете, что это может быть лучше, чем существующие инструменты, обеспечьте некоторые примеры. Я едва полагаю, что существуют реальные случаи, где это может быть более применимо.

1
ответ дан 4 December 2019 в 15:27
поделиться

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

 // MyTestSuite.h
 #include <cxxtest/TestSuite.h>

 class MyTestSuite : public CxxTest::TestSuite 
 {
 public:
    void testAddition( void )
    {
       TS_ASSERT( 1 + 1 > 1 );
       TS_ASSERT_EQUALS( 1 + 1, 2 );
    }
 };

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

// MyRegularCode.cpp

/// Description of the function here
/// Then test case below that gets extracted
/// and turned into CxxTest .h files
/**testAddition
MyClass mc;
mc.MyFunction();
TS_ASSERT( mc.m_value > 1 );
TS_ASSERT_EQUALS( mc.m_value, 3 );
**/
void MyClass::MyFunction()
{
    m_value = 3;
};

Я не уверен, как более мощные аспекты CxxTest реализовать, такие как создание приспособлений, но что-то вроде этого могло бы обеспечить чувство локтя docstrings Python и doctests в мире C++.

0
ответ дан 4 December 2019 в 15:27
поделиться

Я знаю о старых приемах с помещением вещей в реальных комментариях к коду (IIRC, это - часть Практики Программирования). Однако может быть легче просто вставить модульные тесты #ifdef блоки. Можно обычно выполнять препроцессор отдельно для этого вида вещи.

С другой стороны я знаю об одном проекте, который использует Perl в качестве super-duper препроцессора.

0
ответ дан 4 December 2019 в 15:27
поделиться

Среда тестирования, поставляемая с Fost , действительно обрабатывает нечто очень похожее. Тесты не будут включены в документацию, но они могут размещаться вместе с кодом, который они тестируют. По структуре тесты очень похожи на код cxxtest.

#include "myclass.hpp"
#include <fost/test>

FSL_TEST_SUITE( myclass );

/*
    Your documentation
*/
FSL_TEST_FUNCTION( constructors ) {
    fostlib::test::default_constructable< myclass >();
}
myclass::myclass() {
}

FSL_TEST_FUNCTION( some_method ) {
    myclass instance;
    FSL_CHECK_NOTHROW( instance.some_method(0) );
    FSL_CHECK_EQ( instance.some_method(2), 2 );
    FSL_CHECK_NEQ( instance.some_method(-2), 0 );
}
int myclass::some_method( int arg ) {
    // implementation
}

Все эти тесты компилируются со встроенными тестами (вы можете удалить их из сборки с помощью #define - не реализовано, но легко сделать). Затем тесты запускаются через отдельную программу, которая загружает .DLL или .so, которые были созданы, находит тесты и запускает их.

Мы не пробовали, но она должна работать со статическими библиотеками и динамически загружать и выполняются тесты, найденные в файлах .EXE в Windows, но я менее уверен, можно ли это сделать так же в Linux или Mac.

0
ответ дан 4 December 2019 в 15:27
поделиться

Вы можете найти это полезным. Я начал разрабатывать это после того, как это понадобилось в моем собственном коде.

http://github.com/panyam/DocTestPlusPlus

Это скрипт на python, который просматривает ваши комментарии, извлекает тесты и генерирует тестовые файлы.

Все еще находится в стадии разработки и тестирования. Буду признателен за любые отзывы.

будьте здоровы Sri

4
ответ дан 4 December 2019 в 15:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: