c ++ Использование буст-теста - PullRequest
0 голосов
/ 09 августа 2011

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

#include <iostream>
#include <fstream>

#include "graph.hh"

int main(int argc, char **argv) {
  const char* ifile = argv[1];

  Graph gp;
  gp.read_xml(ifile);

  std::cout << "Checking number of nodes and edges..."  << std::endl;
  int nodes_expected = 16;
  if(nodes_expected != gp.nodes()) {
    std::cout << "Test Failed." << std::endl;
    std::cout << "Expected: " << nodes_expected << std::endl;
    std::cout << "Result: " << gp.nodes() << std::endl;
  }
  int edges_expected = 15;
  if(edges_expected != gp.edges()) {
    std::cout << "Test Failed." << std::endl;
    std::cout << "Expected: " << edges_expected << std::endl;
    std::cout << "Result: " << gp.edges() << std::endl;
  }
  return 0;
}

Я прочитал документацию в ( Boost Test ), но он не говоритмне, как принимать аргументы из командной строки.В противном случае, я мог бы использовать BOOST_CHECK_EQUAL.

Ответы [ 3 ]

2 голосов
/ 09 августа 2011
#include <boost/test/included/unit_test.hpp>
#include <fstream>
#include "graph.hh"
using namespace boost::unit_test;

BOOST_AUTO_TEST_CASE( test_num_of_nodes )
{
  Graph gp;
  gp.read_xml( framework::master_test_suite().argv[1] );

  BOOST_MESSAGE( "Checking number of nodes and edges..." );

  BOOST_CHECK_EQUAL(16, gp.nodes());
  BOOST_CHECK_EQUAL(15, gp.edges());
}
0 голосов
/ 09 августа 2011

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

Функции тестового примера, которые вы напишите, будут одной из:

  • Нулевые функции (без аргументов)
  • Унарные функции (один аргумент)
  • Встроенный в класс шаблона (для предоставления аргументов шаблона)

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

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

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

0 голосов
/ 09 августа 2011

Я думаю, что лучшим решением было бы встроить ifile в программу наподобие xxd (проверьте параметр -include), см. http://linuxcommand.org/man_pages/xxd1.html.

Это даст вам файл с массивом char, которыйВы можете просто #include в.

...