Сучасний C + + орієнтований тестовий фреймворк для коду C ++

Я прочитав

Модуль тестування C ++

який закритий як надто широкий; і відповідь-відповідь, в той час як він перераховує кілька рамки тестування це насправді не порівнювати їх або обговорювати їх функції.

Тепер я зацікавлений в тому, щоб додати рамки для тестових одиниць для існуючого проекту. Насправді це вже включає в себе двійковий файл, який виконує певний тип тестових одиниць, або, можливо, я повинен щось між тестами підрозділу та підсистеми - але це не сам блок тестування і не призначений для перевірки всього коду. Саме тому я хочу мати належні рамки. Це може (або не може) також дозволити мені відмовитися від деяких користувацьких кодів, які я маю зараз.

Важливою вимогою, яку я маю, є те, що фреймворк буде орієнтованим на сучасний C ++. Тобто, синтаксис для його використання буде C ++ 11'ish (може бути C ++ 14 або C ++ 17, але останній варіант може дати мені деякі проблеми через CUDA проблеми сумісності), а не тільки підтримка. тестування коду C ++ 11 як запізнення. Тому, коли я читаю, наприклад, що Google Test потребує лише компілятора C ++ 98, мене хвилює.

Інші ключові функції (частково адаптовані з цієї статті ):

  • Мінімальна кількість робіт, необхідних для додавання нових тестів.
  • Легко змінювати та портувати - але не з причин, згаданих тут ! Тобто, вона може і повинна залежати від розширеної мови C ++ і стандартних бібліотечних функцій, якщо вони стандартні; і я не заперечую залежностей від щось на зразок, скажімо, CMake, або якоїсь мови сценаріїв і т.д., до тих пір, поки він стійкий до різниці між дистрибутивами ОС і ОС.
  • Підтримка налаштування/виведення кроків (приладів).
  • Гнучка та надійна w.r.t. виключень, збоїв і тверджень.
  • Приємний вивід консолі з покращеним друком/ASCII-графікою. Я не дбаю про будь-які конкретні особливості, наприклад, кольори у порівнянні з монохромними, а також чи є анімовані прогрес та успіхи/невдачі, але це має бути приємним для читання.
  • Інтеграція з середовищами інтегрованих середовищ (IDE) є великим плюсом

і звичайно:

  • Безкоштовна та відкрита ліцензія
  • Gratis
  • Підтримка різних форматів виводу, які можна використовувати різними інструментами після завершення роботи

Мені дуже хотілося б порівняння сильних і слабких сторін w.r.t. функції, які я перерахував, а також порівняння за єдиною структурою.

2
Що сталося з github.com/google/googletest ?
додано Автор Mawg, джерело
Дякуємо за пояснення. Це допоможе іншим користувачам допомогти вам (+1)
додано Автор Mawg, джерело
@Mawg: Старий, не використовуючи функції C ++ 11/14.
додано Автор Vijay Ramesh, джерело

5 Відповіді

1
додано
Чи можете ви пояснити, як він орієнтований на сучасний C ++? Я відчував, що це трохи старе.
додано Автор Vijay Ramesh, джерело
Я мав на увазі "старий", як у "реалізований в до-2011 C ++".
додано Автор Vijay Ramesh, джерело
@einpoklum - правильне слово "зрілий", а не "старий". Чому ви не вказуєте, в якому аспекті вона застаріла, і ми обговорюємо?
додано Автор John Kuehne, джерело
тестував код C ++ 1xyz з часу, коли він називався C ++ 0x (наприкінці 2010 року), ніколи не відчував, що Boost.Test блокує мене, ти хочеш побудувати бібліотеку певних проектних тестів навколо себе, але це все - не змушують вас погіршувати синтаксис (або використовувати boost :: mpl і boost :: fusion зайво :-))
додано Автор John Kuehne, джерело

Бандит

"Модельне тестування для C ++ 11"

Мабуть, цей фреймворк "нахиляється назад", щоб зробити вихідний код вашого тесту схожим на тест з описом природної мови. Наприклад, це тест гітари, який гарантує, що звук буде спотвореним в режимі спотворення:

describe("in distorted mode", [&]() {
    before_each([&]() { fuzzbox->flip(); });

    it("sounds distorted", [&]() {
        AssertThat(guitar->sound(), Equals(sounds::distorted));
    });
});

Примітка: Я сам цього не спробував.

0
додано
a) Будь ласка, не рекомендуйте речі, які ви самі не пробували. b) не пропонуйте декілька інструментів в одній відповіді.
додано Автор JasonMichael, джерело
додано Автор JasonMichael, джерело
Особистий досвід:
додано Автор JasonMichael, джерело
Я не можу позначити: це не спам, не грубий, це (мульти-) відповідь, і це не завдання модератора розділити відповіді на частини.
додано Автор JasonMichael, джерело
Також цікаво, що ви самі мали оригінальну потребу в такому інструменті, і тепер ви не спробували вирішити цю проблему. Чому ні?
додано Автор JasonMichael, джерело
@ThomasWeller: а) На чому ви базуєте ці пропозиції? b) Ви хочете запропонувати замість цього декілька відповідей?
додано Автор Vijay Ramesh, джерело
@ThomasWeller: a) Поки що немає посилань на це ... і я не згоден. Люди можуть випробувати інструменти навіть без оцінки тут на сайті. b) Так прапор, не downvote ... в будь-якому випадку, розділити мою відповідь.
додано Автор Vijay Ramesh, джерело
@ThomasWeller: Мої зусилля з кодування були зосереджені в іншому місці; і тести можуть продовжувати бути написаними без належної структури.
додано Автор Vijay Ramesh, джерело

Mettle

C ++ 14-і фреймворк!

Приклад:

suite<> basic("a basic suite", [](auto &_) {
  _.test("a test", []() {
    expect(true, equal_to(true));
  });

  for(int i = 0; i < 4; i++) {
    _.test("test number " + std::to_string(i), [i]() {
      expect(i % 2, less(2));
    });
  }

  subsuite<>(_, "a subsuite", [](auto &_) {
    _.test("a sub-test", []() {
      expect(true, equal_to(true));
    });
  });
});

Примітка: Я сам не спробував.

0
додано

щоб

  • Stated design goals: Modern and C++11-native, single-file, header-only, small size
  • Framework code: https://github.com/martinmoene/щоб
  • Missing: Suites of tests, parameterised tests, templated tests, test data generators, built-in hamcrest matchers.

Приклад:

const щоб::test specification[] =
{
    CASE( "Empty string has length zero (succeed)" )
    {
        EXPECT( 0 == string(  ).length() );
        EXPECT( 0 == string("").length() );    
   },
}

Примітка: Я сам не пробував.

0
додано

DocTest

Представлено у CppCon 2017 Віктором Кириловим

Ця активно розвинена структура насправді не є сучасною C ++ - цільовою, але вона прагне бути з наступним великим випуском (2.0; зараз 1.2).

  • Motto: "The fastest feature-rich C++98/C++11 single-header testing framework for unit tests and TDD"
  • Framework code: https://github.com/onqtam/DocTest
  • Ambitious roadmap, including IDE integrations
  • Purportedly very fast - with [benchmarks] against the Catch framework (but I have no idea if Catch is faster than Gtest, CppUnit etc.)

Примітка: Я сам цього не спробував.

0
додано
IT KPI C/С++ новым годом
IT KPI C/С++ новым годом
747 учасників

Чат обсуждения С/С++. - Вопросы "напишите за меня лабу" - это оффтоп. - Оффтоп, флуд, оскорбления и вбросы здесь не приняты. - За нарушение - предупреждение или mute на неделю. - За спам и рекламу - ban. Все чаты IT KPI: https://t.me/itkpi/1147