TestNG отладка кода. Остановка выполнения на первой строке

Всем привет!

Хотел узнать про откладку в TestNG. Интересует, скажем так, первая обрабатываемая строка в коде. При наличии метода main это понятно, а с testng не совсем. Вопросы следующие:

  1. Если я использую @BeforeClass (без листенеров), то с этого и начинается выполнение шагов?
  2. Как остановить дебаггер на первой строке без использования breakpoints? Есть ли аналогии ‘stop in main’ для testng?

Большое спасибо за помощь.

Уж поверьте, “первая обрабатываемая строка в коде” вас точно не интересует. Есть вещи, о существовании которых вы даже не подозреваете на текущем этапе вашего обучения основам.

Тут следовало бы уточнить, о каких шагах идет речь. Ну и вряд ли вы тут найдете свободных экстрасенсов, которые смогли бы ответить на этот вопрос, не глядя в код (полную версию).

Отладка предполагает, что программист знает (хотя бы приблизительно), что и где он хочет проанализировать во время выполнения. Для этого и ставятся breakpoints. Но если вы и сами не знаете, чего хотите, как IDE сможет за вас это определить?

Вы задаете неправильные вопросы. Попробуйте сформулировать конечную цель. Что именно вы хотите продебажить? Зачем вам понадобилась первая строка?

3 лайка

Сергей, большое спасибо за ответ!
Расскажу поподробнее.
Такое внимание к первой строке в связи с тем, что сейчас анализирую готовый проект автоматизированного тестирования, в котором сложная реализация конфигурации при запуске тестов. Интересует вызываемая первая строка, написанная именно программистом автотестов, а не внутренние системные вещи.
Все таки думаю что бывают такие случаи когда программист анализирует чужой код, и требуются понять откуда и что сначала вызывается, когда это не так явно в коде. Поэтому, полагаю, в ide и реализован, как уже указывал, флаг “stop in main” для пошагового анализа выполнения программы с самого начала. Вот ищу аналоги для testng когда отсутствует метод main.
Хотелось бы наверное точно узнать про последовательность и приоритетность при вызове - метки Before листенеры и т.д, что перед чем вызывается. Куда лучше ставить breakpoint, чтобы постараться попасть в самое начало, если нет специальных надстроек в ide/плагинах.

Могу Вас уверить что если в проекте нет этих строк:
TestNG test = new TestNG(true);
test.setTestClasses(new Class[]{cl});
test.run();

то концов вы не найдёте, тоесть в данном случае TestNG специально вскарлюю нужный клас для тестирования, а в инном, это на пример на папке или класе нажать правой кнопкой и выбрать запустить на тест, то там срабатывает совсем другая логика запуска, начиная от static{} и сканирование запущеного на тест класса, то смыска искать корни нет, потому что они глубоко в TestNG и вам оно ничего не даст

2 лайка

Спасибо за ответ!
Честно говоря, думал, что большинство разработчиков автотестов используют такую структуру - класс с тестами является наследником класса шаблона, в котором содержатся аннотации @Before… Поэтому так и упирал на них c целью поставить туда breakpoint. Но видимо действительно, есть еще множество интересных реализаций. Если поделитесь ссылками с примерами различных архитектур, буду признателен.

ну … я не могу вам дать такую ссылку потому что нигде и не видел такого… как бы каждый пишет по возможности понимания работы + как говорил один человек - авто тесты должны быть просты, что бы любой кто будет работать с ними смог понять что оно делает. Вами представленна идея наследия тестового класа от какого то там класса шаблона нарушает принцып простоты теста.

если интересно откуда ноги ростут , поставьте брекпоинт гдето BeforeClass , и пройдите по стек трейсу вывовов, если найдёте что вас интересует, будет круто, но думаю там будет куча внутренних вызовов TestNG и всё.
если стека будет не хватать, опуститесь в саммый низ., и там в недрах фрейворка вы также можете поставить брек поинт…