инициализация на boost-test приложение

Току-що се заявявам с boost-test и модулно тестване като цяло с ново приложение и не съм сигурен как да се справя с инициализацията на приложенията (напр. зареждане на конфигурационни файлове, свързване с база данни, стартиране на вграден интерпретатор на Python и т.н.) .

Искам да тествам този процес на инициализация, а също и повечето други модули в приложението изискват инициализацията да е извършена успешно.

Някакъв начин за стартиране на код за изключване също би бил оценен.

Как трябва да направя това?


person Fire Lancer    schedule 05.01.2010    source източник


Отговори (2)


Изглежда, че това, което възнамерявате да направите, е повече тест за интеграция, отколкото тест за единица. Не е за определяне на формулировката, но има значение. Единичното тестване означава методи за тестване изолирано, в среда, наречена фиксиране, създадена само за един тест, завършена и след това изтрита. Друг екземпляр на приспособлението ще бъде пресъздадено, ако следващият случай изисква същото приспособление. Това се прави, за да се изолират тестовете, така че грешка в един тест да не повлияе на резултата от следващите тестове.

Обикновено един тест има три стъпки:

  • Подредете - подгответе приспособлението: инстанцирайте класа, който ще бъде тестван, евентуално необходими други обекти
  • Действайте - извикайте метода, който ще се тества
  • Утвърждавайте - проверете очакванията

Единичните тестове обикновено стоят настрана от външни ресурси като файлове и бази данни. Вместо това се използват фалшиви обекти за задоволяване на зависимостите на тествания клас.

Въпреки това, в зависимост от типа на вашето приложение, можете да опитате да стартирате тестове от самото приложение. Това не е „чисто“ тестване на единици, но може да бъде ценно така или иначе, особено ако кодът не е написан с мисъл за тестване на единици, може да не е достатъчно „гъвкав“, за да бъде тестван на единици.

Това се нуждае от специален режим на изпълнение, с параметър "-test" например, който ще инициализира приложението нормално и след това ще извика тестове, които ще симулират входове и ще използват твърдения, за да проверят дали приложението реагира според очакванията. По същия начин може да е възможно да се извика кодът за изключване и да се провери с твърдения дали връзката с базата данни е затворена (ако обектите не са изтрити).

Този подход има няколко недостатъка в сравнение с модулните тестове: зависи от конфигурационните файлове (софтуерът може да се държи различно в зависимост от параметрите), от базата данни (от нейното съдържание и от възможността за свързване с нея), тестовете не са изолирани ... Първите две могат да бъдат преодолени с помощта на стойности по подразбиране за конфигурацията и свързване към тестова база данни в режим тест.

person philant    schedule 05.01.2010

Определяте ли BOOST_TEST_MAIN? Ако е така и нямате собствена функция main (където иначе бихте поставили код за инициализация), бихте могли да използвате някаква форма на единичен обект, който излага функция за стартиране, която можете да извикате преди всеки тест, ако е необходимо.

person Rob    schedule 05.01.2010