Для каждого фрагмента должна быть указана спецификация типа. Тип определяет момент запуска фрагмента в ходе выполнения целевых методов. Датчик может состоять из нескольких фрагментов, однако фрагменты одинаковых типов недопустимы.
Тип фрагмента | Метод или вызов | Описание |
---|---|---|
entry | Метод | Фрагменты entry выполняются при входе в метод. Фрагменты entry не выполняются для методов, вставленных в класс с помощью Probekit. |
exit | Метод | Фрагменты exit выполняются при выходе из метода: при нормальном, при возникновении исключительной ситуации или когда исключительная ситуация приводит к выходу из метода. Фрагменты exit не выполняются для методов, которые были вставлены в класс с помощью Probekit. |
catch | Метод | Фрагменты catch выполняются в начале оператора catch в методе или в начале оператора finally, выполняемого в результате возникновения исключительной ситуации. |
staticInitializer | Метод | Фрагменты staticInitializer выполняются внутри инициализатора класса всех тестируемых методов. Если у класса еще нет статического инициализатора, он будет создан. Дополнительная информация приведена в разделе Тип фрагмента датчика staticInitializer. |
executableUnit | Метод | Фрагменты executableUnit выполняются перед каждым исполняемым модулем кода в методах, совпадающих с целевым объектом датчика и фильтром, и для которых указан исходный код. Если метод не содержит информации о номерах строк, у него будет лишь один исполняемый модуль под номером ноль. Дополнительная информация приведена в разделе Тип фрагмента датчика executableUnit. |
beforeCall | Вызов | Фрагменты beforeCall выполняются в вызывающем методе непосредственно перед вызовом целевого метода. Неприменимо для датчиков метода. |
afterCall | Вызов | Фрагменты afterCall выполняются в вызывающем методе сразу после выхода из целевого метода, при обычном выходе или при возникновении исключительной ситуации в целевом методе. Неприменимо для датчиков метода. |
Датчик может иметь несколько фрагментов, применяемых к одному расположению в методе, например, фрагмент entry и первое расположение executableUnit. В качестве другого примера можно привести фрагмент catch и связанное с ним расположение executableUnit, поскольку операторы обработки исключительных ситуаций catch всегда представляют собой начало нового исполняемого модуля. В этих случаях код фрагмента executableUnit выполняется после кода фрагментов entry или catch. В результате фрагменты entry, если они присутствуют, всегда будут выполняться перед другими типами фрагментов.
В одном датчике нельзя использовать одновременно фрагменты датчиков метода и датчиков вызова. Однако их можно добавить в состав одного исходного файла Probekit (файл probe).
Для того чтобы указать тип фрагмента, выберите запись Fragment в дереве на странице Датчики, затем в панели редактирования выберите запись в списке Тип фрагмента.