Вы можете вызвать функцию fragmentManager.popBackStackImmediate (); когда действие приостановлено. Активность не завершена, но приостановлена, а не на переднем плане. Вам нужно проверить, приостановлена ли операция или нет до popBackStackImmediate ().
Динамические тесты, я называю их тестлетами, это просто мягкие / групповые утверждения (assertAll(...)
) на стероидах. Вы увидите запись для каждого сгенерированного динамического теста в отчетах, но они не являются реальными тестами.
Цитата (из baeldung), которую вы скопировали в свой вопрос, неверна . Он должен читаться как в Руководстве пользователя JUnit:
Жизненный цикл динамического теста
Жизненный цикл выполнения динамического теста весьма отличается от стандартного
blockquote>@Test
Дело. В частности, нет никаких обратных вызовов жизненного цикла для отдельных динамических тестов. Это означает, что методы@BeforeEach
и@AfterEach
и соответствующие им обратные вызовы расширений выполняются для метода@TestFactory
, но не для каждого динамического теста.Для получения более подробной информации читайте: https://junit.org/junit5/docs/current/user-guide/#writing-tests-dynamic-tests
Почему кто-то предпочитает параметризованные тесты, а не динамические?
blockquote>
- Если вам нужна полная поддержка жизненного цикла для каждого теста (вызов шаблона).
- Если вы хотите объявить свои аргументы в аннотациях.
Узнайте больше подробностей о том, как предоставлять аргументы в различных формах
@ParameterizedTest
здесь: https://junit.org/junit5/docs/current/user-guide/#writing- tests-параметризованных tests - учтите, что «шаблоны классов / контейнеров» запланированы для более позднего выпуска: https://github.com/junit-team/junit5/issues/878 [1122 ]Я написал сообщение в блоге, в котором сравнивал 5 шагов рассеяния 3 утверждений с JUnit Jupiter здесь: https://sormuras.github.io/blog/2018-05-14-junit5-scatter-assertions.html [ 119]
Большая гибкость, так или иначе, означает, что писать сложнее и проще, особенно в большинстве случаев тестовый пример довольно статичен, но не настолько динамичен.
Предположим, я хочу проверить Math.add()
:
Параметризованная версия теста выглядит следующим образом:
@ParameterizedTest
@CsvSource({ "1,1,2",
"2,2,4",
"3,3,6",
"4,4,8",
"5,5,10",
"6,6,12",
"7,7,14",
"10,90,100" })
public void parameterizedTest(int left, int right, int expected) {
assertEquals(expected, Math.addExact(left, right));
}
Динамическая версия теста выглядит следующим образом:
@TestFactory
Collection<DynamicTest> dynamicTest() {
return Arrays.asList(
DynamicTest.dynamicTest("Test1", () -> assertEquals(2, Math.addExact(1, 1))),
DynamicTest.dynamicTest("Test2", () -> assertEquals(4, Math.addExact(2, 2))),
DynamicTest.dynamicTest("Test3", () -> assertEquals(6, Math.addExact(3, 3))),
DynamicTest.dynamicTest("Test4", () -> assertEquals(8, Math.addExact(4, 4))),
DynamicTest.dynamicTest("Test5", () -> assertEquals(10, Math.addExact(5, 5))),
DynamicTest.dynamicTest("Test6", () -> assertEquals(12, Math.addExact(6, 6))),
DynamicTest.dynamicTest("Test7", () -> assertEquals(14, Math.addExact(7, 7))),
DynamicTest.dynamicTest("Test8", () -> assertEquals(100, Math.addExact(10, 90))));
}
У него уже есть много шаблонных кодов. Поэтому я пытаюсь использовать return Stream<DynamicTest>
для удаления этих шаблонных кодов:
@TestFactory
Stream<DynamicTest> dynamicTest2() {
return Stream.of(
"1,1,2",
"2,2,4",
"3,3,6",
"4,4,8" ,
"5,5,10" ,
"6,6,12" ,
"7,7,14",
"10,90,100")
//How to do????????
.map(data-> DynamicTest.dynamicTest(data, () -> assertEquals(xxx, Math.addExact(yy,zz))));
}
Но как я могу преобразовать мои тестовые данные в формате строки в аргументы и вызвать SUT. Я оглядываюсь по DynamicTest
API, чтобы увидеть, может ли что-нибудь помочь мне, но не могу найти ничего полезного, поэтому я сдаюсь .....