Можно ли хранить тест-кейсы внутри соответствующего класса? (C ++) - PullRequest
2 голосов
/ 24 июня 2009

Я начал писать свои тесты как статические функции в классе, который я хочу тестировать. Эти функции обычно тестируют функциональность, создают много объектов, измеряют потребление памяти (для обнаружения утечек) и т. Д.

Это хорошая или плохая практика? Это укусит меня в конечном счете?

Ответы [ 6 ]

3 голосов
/ 24 июня 2009

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

Я бы рекомендовал написать модульные тесты с CppUnit .

1 голос
/ 24 июня 2009

Если у вас есть тестовые наборы внутри вашего класса, трудно иметь такие вещи, как приборы.

Я также собираюсь выкрикнуть Boost.Test . Кривая обучения немного высока, но она удивительна, когда вы к ней привыкли.

1 голос
/ 24 июня 2009

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

Чтобы упростить модульное тестирование whitebox для тестируемого класса, вам часто нужно объявить тестовый класс / тестовые функции как друга. Некоторые классы можно тестировать только с публичными участниками, поэтому добавление друзей не всегда необходимо.

Объединить тестовый код и тестируемый код очень просто: вы просто связываете объектные файлы в одном проекте.

Иногда вы можете увидеть код модульного теста, который #include представляет собой тестируемый код, но я бы советовал против этого - например, если у вас есть инструмент измерения покрытия тестирования (настоятельно рекомендуется!), Меры не будут исправить для тестируемого кода.

1 голос
/ 24 июня 2009

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

1 голос
/ 24 июня 2009

Нет, вместо этого вы должны написать модульные тесты .

0 голосов
/ 24 июня 2009

Это плохая практика.

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

То, как вы хотите проверить класс Foo, выглядит так:

//Foo.cpp
class Foo {
  public:
     int GetInt() { return 15; }
};

//FooTest.cpp
TEST(FooTest, testGetIntShouldReturn15) {
   Foo foo;
   ASSERT_EQUAL(15, foo.GetInt());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...