У меня есть сценарий использования, как показано ниже
Для каждого теста в потоке JUnit это примерно так: 1. в @BeforeEach Stop / Start смоделированный компонент, чтобы иметь возможность получать данные 2. в @Test отправлять данныечтобы смоделировать компонент и получить ответ обратно и сделать утверждение
Улучшение, которое я ищу, должно быть в состоянии запускать / останавливать смоделированный компонент с различными настройками / настройками.
Я думаю, что есть несколько вариантов:
1. Используйте тег Junit 5 (чтобы мы знали, какие тестовые примеры используют какой тег)
2. В методе @BeforeEach внедрите класс TestInfo и получитетеги и остановить / запустить макет компонента соответственно в соответствии с тегами.
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInfo;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.TestReporter;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
public class TestJUnit {
@BeforeAll
public static void onlyOnce() {
System.out.println("only once");
}
MockedComponent mock;
Actor actor;
@BeforeEach
public void restartComponent(TestInfo testInfo,TestReporter report) {
System.out.println("before each "+testInfo.getDisplayName()+"|"+testInfo.getTags()+"|"+testInfo.getTestClass());
mock.stop();
mock.start(testInfo.getTags().iterator().next());
}
@ParameterizedTest
@Tag("config1.settings")
public void testUsingConfig1() {
System.out.println("testHeaderValuesArePopulated ");
actor.getDataFromComponent().assertOrderId(123);
}
@ParameterizedTest
@Tag("config2.settings")
public void testUsingConfig2() {
actor.sendMsg("test messages 2");
actor.getDataFromComponent().assertOrderId(123);
}
}
Есть ли лучший способ сделать это с помощью Junit5?