Сохранение тестов для начала с известным состоянием - как насчет многопоточности? - PullRequest
1 голос
/ 05 июля 2011

Я пытаюсь очистить свои тесты, всегда возвращаясь к известному состоянию перед каждым тестом. В JUnit кажется, что лучший способ сделать это - использовать метод setup(), который устанавливает значения для некоторых полей. При параллельном запуске тестов поле всегда корректно, поскольку каждый тест выполняется в новом экземпляре теста.

Однако в TestNG это не так. Согласно сообщению в их списке рассылки , установка полей в @BeforeMethod в многопоточном тестировании не гарантирует их ценность.

Поскольку мне нужно, чтобы тестируемые классы находились в известном состоянии, есть ли более чистое решение, чем использование DataProvider или высказывание «Никогда не запускать тесты в многопоточном режиме»?

1 Ответ

1 голос
/ 05 июля 2011

Существует только одно различие между TestNG и JUnit в этой конкретной области: JUnit будет создавать новый экземпляр вашего теста перед каждым методом тестирования, TestNG не будет.

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

Если вы хотите, чтобы это состояние каждый раз сбрасывалось, просто поместите код инициализации в @BeforeMethod, как вы делаете это с JUnit (за исключением того, что он называется @Before).

Что касается многопоточности, я не понимаю, почему вы говорите, что нет гарантии относительно этого значения, можете ли вы быть более конкретным?

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