Какие-нибудь стандартные методы, механизмы, инструменты для генерации исключений для использования с тестовым кодом для тщательного тестирования C ++? - PullRequest
1 голос
/ 23 января 2011

С версией Symbian для C ++ для Symbian можно точно контролировать симуляцию условий нехватки памяти и, таким образом, детерминистически генерировать отпуск (отпуск является эквивалентом броска Symbian C ++) для всех возможных комбинаций путей выполнения в вашем коде на основе сбоя выделения .

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

Для тех из вас, у кого есть копия Exceptional C ++, обратитесь к пункту 18 - представьте, что вы можете довольно легко сгенерировать условия для тестирования всех 23 путей выполнения с помощью этого кода и вытекающих из этого преимуществ.

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

Предположим, вам пришлось протестировать код в пункте 18 «Исключительного C ++» (и, пожалуйста, давайте не будем обсуждать, что код должен быть переписан, предположим, что этого не может быть). Как вы можете протестировать его, чтобы убедиться, что все 23 пути выполнения выполняются в тестовом коде?


Этот вопрос не о Symbian, я использую его для предоставления некоторого контекста, чтобы проиллюстрировать из опыта невероятную выгоду способности детерминистически управлять генерацией исключений для целей тестирования и, таким образом, интересуется, как этого добиться в стандартном C ++ .

1 Ответ

1 голос
/ 23 января 2011

Вы можете заменить глобальный оператор новым, поэтому любое выделение, которое проходит через это, теперь проходит через ваш код. Затем в этом коде делайте все, что хотите, чтобы контролировать, когда происходит сбой выделения и выдается исключение. Единственная стратегия, которую я на самом деле использовал, - это простой счетчик в распределителе. Сначала запустите код таким образом, что первое выделение, которое он выполняет, не удастся, затем повторите его, если второе выделение не будет выполнено и т. Д., Пока тестируемый код не завершит работу, пока счетчик не достигнет значения, которое вызовет произведенный сбой. На каждом этапе проверяйте наличие утечек памяти и выполняйте любые другие тесты на согласованность структур.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...