Тестовая структура для тестирования компонентов - PullRequest
2 голосов
/ 17 января 2010

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

  • SetUp (Существуют некоторые входные файлы, которые необходимо прочитать или скопировать в определенные папки.)
  • Выполнить (запустить в одиночку)
  • Tear Down (Очистить, чтобы привести систему в старое состояние)

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

Я оцениваю PyUnit, cppunit с scons для этого. Мысль задать этот вопрос, чтобы убедиться, что я в правильном направлении. Можете ли вы предложить какие-либо другие инструменты для тестирования инфраструктуры? И какие еще требования следует учитывать для выбора правильной тестовой среды?

Ответы [ 2 ]

5 голосов
/ 17 января 2010

Попробуйте googletest AKA gTest он ничуть не хуже любого другого фреймворка для юнит-тестов, но может также побить некоторых с простотой использования.Не совсем тот инструмент для интеграционного тестирования, который вы ищете, но в большинстве случаев его легко применить.Эта страница wikipedia также может быть полезна для вас.

Вот копия примера на странице проекта gTest:

#include <gtest/gtest.h>

namespace {

// The fixture for testing class Foo.
class FooTest : public ::testing::Test {
 protected:
  // You can remove any or all of the following functions if its body
  // is empty.

  FooTest() {
    // You can do set-up work for each test here.
  }

  virtual ~FooTest() {
    // You can do clean-up work that doesn't throw exceptions here.
  }

  // If the constructor and destructor are not enough for setting up
  // and cleaning up each test, you can define the following methods:

  virtual void SetUp() {
    // Code here will be called immediately after the constructor (right
    // before each test).
  }

  virtual void TearDown() {
    // Code here will be called immediately after each test (right
    // before the destructor).
  }

  // Objects declared here can be used by all tests in the test case for Foo.
};

// Tests that Foo does Xyz.
TEST_F(FooTest, DoesXyz) {
  // Exercises the Xyz feature of Foo.
}

Scons может позаботиться о создании.cc Когда они изменяются, gTest можно использовать для установки и разрыва ваших тестов.

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

Один хороший вариант IMO, и это то, что наша платформа автоматизации тестированиядля продвижения используются тесты на нос в сочетании с библиотекой общих процедур (таких как запуск / остановка служб, получение статуса чего-либо, включение / отключение регистрации в определенных компонентах и ​​т. д.).Это дает вам гибкую систему, которая также довольно проста в использовании.И поскольку он использует Python, а не C ++ или что-то подобное, все больше людей могут быть заняты созданием тестовых случаев, включая QE, которые не обязательно должны быть в состоянии писать на C ++.

2 голосов
/ 17 января 2010

После прочтения этой статьи http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle некоторое время назад я пошел на CxxTest.

Как только вы все настроите (например, вам нужно установить python), довольно легко писать тесты (я был совершенно не знаком с юнит-тестами)

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

...