#testing #junit5 #parametrized-testing
Вопрос:
У меня есть тестовый класс, состоящий из метода @Before с некоторыми параметрами и других методов тестирования.
@Before
@ParameterizedTest
@ValueSource(strings = {"123", "456"})
public void createData(String userId) {
someMethod(userId)
}
@ParameterizedTest
@ValueSource(strings = {"123", "456"})
public void abc(String userId) {}
но он продолжает сначала выполнять abc() и выдает ошибку
org.junit.jupiter.api.extension.ParameterResolutionException: No ParameterResolver registered for parameter [java.lang.String arg0] in method [public void tests.xxx.createData(java.lang.String) throws java.io.IOException].
Я совершенно новичок в параметрах JUnit. Может ли метод Before быть одновременно параметризованным тестом? Без этой аннотации [ПараметризовАнные тесты], похоже, это работает не так, как задумывалось, но, с другой стороны, мне нужно, чтобы это выполнялось раньше всех других методов. В чем может быть проблема и каково ее решение?
Комментарии:
1. Пожалуйста, проясните, что вы действительно хотите сделать? Запускать
init()
метод перед каждым тестированием? В этом случае используйте@BeforeEach
. Но имейте в виду, что это не тест, а просто начальная загрузка. В противном случае, если вам нужно контролировать порядок выполнения тестовых случаев, используйте@Order()
аннотации к методам тестирования.2. Мне нужно, чтобы этот метод был запущен один раз перед всеми другими методами тестирования (поэтому в данном случае я предполагаю, что мне нужно использовать
@BeforeAll
, но тогда он должен быть статичным или аннотированным@TestInstance(Lifecycle.PER_CLASS))
. Но также мне нужен этот@BeforeAll
метод (метод инициализации), чтобы иметь параметры в точке входа3. Параметризованные тесты предназначены для создания множества различных тестов с одинаковой логикой (методом тестирования), но разными значениями. Учитывая эту информацию, что должен делать метод before-all с параметрами, поскольку он вызывается только один раз? Какие из идентификаторов пользователей следует ввести?
4. вы правы. я просто хотел запустить его раньше остальных, поэтому я думаю, что должен пойти с
@Order()
ним . Но когда я пытаюсь сделать это с помощью (1), (2) и т. Д., Он отправляет первый (createData
) и выполняет его в конце!5. Хорошо, я добавил
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
, и это работает