Среда тестирования C/C++ (как JUnit для Java) [закрытый]

Как утверждает Кристоф Ламбрехтс, BitVector32 предоставляет решение. Эффективность Jitted должна быть адекватной, но не знаю точно. Вот код, иллюстрирующий это решение:

public struct rcSpan
{
    //C# Spec 10.4.5.1: The static field variable initializers of a class correspond to a sequence of assignments that are executed in the textual order in which they appear in the class declaration.
    internal static readonly BitVector32.Section sminSection = BitVector32.CreateSection(0x1FFF);
    internal static readonly BitVector32.Section smaxSection = BitVector32.CreateSection(0x1FFF, sminSection);
    internal static readonly BitVector32.Section areaSection = BitVector32.CreateSection(0x3F, smaxSection);

    internal BitVector32 data;

    //public uint smin : 13; 
    public uint smin
    {
        get { return (uint)data[sminSection]; }
        set { data[sminSection] = (int)value; }
    }

    //public uint smax : 13; 
    public uint smax
    {
        get { return (uint)data[smaxSection]; }
        set { data[smaxSection] = (int)value; }
    }

    //public uint area : 6; 
    public uint area
    {
        get { return (uint)data[areaSection]; }
        set { data[areaSection] = (int)value; }
    }
}

Вы можете так много сделать. Вы можете сделать еще лучше, не используя BitVector32, предоставляя устройства для ручной работы для каждого поля:

public struct rcSpan2
{
    internal uint data;

    //public uint smin : 13; 
    public uint smin
    {
        get { return data & 0x1FFF; }
        set { data = (data & ~0x1FFFu ) | (value & 0x1FFF); }
    }

    //public uint smax : 13; 
    public uint smax
    {
        get { return (data >> 13) & 0x1FFF; }
        set { data = (data & ~(0x1FFFu << 13)) | (value & 0x1FFF) << 13; }
    }

    //public uint area : 6; 
    public uint area
    {
        get { return (data >> 26) & 0x3F; }
        set { data = (data & ~(0x3F << 26)) | (value & 0x3F) << 26; }
    }
}

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

17
задан Milan 1 July 2009 в 04:10
поделиться

14 ответов

В 2019:

-1
ответ дан 30 November 2019 в 10:59
поделиться

, если это для платформы Windows, вы можете попробовать WinUnit от MS отсюда. Упрощенное модульное тестирование для собственного приложения C ++

0
ответ дан 30 November 2019 в 10:59
поделиться

, если вы используете окна, посмотрите: Ограничения использования C ++ / CLI с NUnit и напишите свои тесты в http://en.wikipedia.org/wiki/Managed_Extensions_for_C% 2B% 2B .

также: http://golios.blogspot.com/2008/12/using-nunit-with-c-part-2.html , http : //golios.blogspot.com/2008/11/using-nunit-with-native-c.html

это будет работать только как junit, за исключением того факта, что nunit не создает новый экземпляр класса тестового примера перед запуском каждого теста.

0
ответ дан 30 November 2019 в 10:59
поделиться

Для Symbian есть SymbianOSUnit: http://www.symbianosunit.co.uk/

0
ответ дан 30 November 2019 в 10:59
поделиться

Another problem people grossly over-engineer.

The below is a top-of-my-head, rough, non-working implementation of a nominal unit test infrastructure. It makes some sense to construct Test with a std::string namespace/class name and use a consistent naming scheme to print out which test is failing. I just use a unit test template and have some scripts that find all the executables starting with u (one per class), runs them in turn and collects the return values.

struct Test
{
   std::vector<(std::string)fptr*(void)> tests;
   int run() const
   {
      int stat(0);
      for (/* tests */)
      {
         std::string const res(test.run());
         if (!res.empty())
         {
             std::cerr << res;
             ++stat;
         }
      }
      return stat;
   }
};

std::string test1()
{
   std::ostringstream oss;
// do a bunch of stuff
// mark some of this code to be pulled into the class documentation 

   // conditional checks follow
   if (fail)
   {
      oss << "fail: some reason" << std::endl;
   }
// more checks
   return oss.str();
}

int main(void)
{
   Tests tests;
   tests.push_back(test1);
   tests.push_back(test2);
   return tests.run();
}
1
ответ дан 30 November 2019 в 10:59
поделиться

В Википедии есть длинный список сред модульного тестирования для C ++ и еще один список для C .

2
ответ дан 30 November 2019 в 10:59
поделиться

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

Я считаю, что он был разработан Ноэлем Ллописом после написания статьи, упомянутой в http : //gamesfromwithin.com/? p = 29 . Его довольно легко перенести на множество различных компиляторов / платформ - полезно, если нужно настроить таргетинг на что-то другое, кроме ПК, будь то игровая консоль, встроенное устройство или что-то еще.

Список рассылки какое-то время молчал. сейчас, но время от времени возникают вопросы, исправления и / или новые версии, и люди, которые задают вопросы, обычно получают быстрые ответы.

3
ответ дан 30 November 2019 в 10:59
поделиться

Бесстыдный плагин: если вы ориентируетесь на Windows и используете Visual Studio, ознакомьтесь с cfix и cfix studio .

Он также совместим с WinUnit.

1
ответ дан 30 November 2019 в 10:59
поделиться

Мы используем Google Test и его сопутствующий Google Mock . Прекрасно работает и поддерживает вывод XML в стиле JUnit для легкой интеграции с CruiseControl и т. Д. Это также полностью кроссплатформенный, и, судя по моему исследованию несколько месяцев назад, GMock был ТОЛЬКО полностью кроссплатформенной средой имитации объектов для C ++.

14
ответ дан 30 November 2019 в 10:59
поделиться

Мы используем boost.Test . Также есть cppunit .

13
ответ дан 30 November 2019 в 10:59
поделиться

Почему бы не использовать CppUnit ? Он был создан как порт JUnit.

1
ответ дан 30 November 2019 в 10:59
поделиться

В последней версии Visual Studio есть что-то:

http://msdn.microsoft.com/en-us/library/ms243147 (VS.80) .aspx

1
ответ дан 30 November 2019 в 10:59
поделиться

Я работаю с Qt под Windows и Linux, который предоставляет собственную интегрированную (но по сравнению с другими отдельными решениями немного ограниченную) среду тестирования.

Его очень легко использовать и быстро изучить - см. QTestLib

ciao, Крис

2
ответ дан 30 November 2019 в 10:59
поделиться
Другие вопросы по тегам:

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