Почему мой тест выполняется менее чем за 1 секунду в однократном выполнении, а более 20 секунд в сборке Maven? - PullRequest
1 голос
/ 18 июня 2019

Я работаю над проектом с несколькими тестами интеграции, основанными на весенней загрузке, которые в общей сложности занимают ~ 5 минут.Пытаясь уменьшить это время выполнения, я заметил, что один очень маленький и простой тест занимает ~ 20 секунд.При запуске «в одиночку» это занимает меньше секунды, чего я и ожидал.

Все остальные тесты - это тесты интеграции с аннотациями, такими как:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK)
@MockBean(value = SomeBean.class)
@MockMvcTest
@ContextConfiguration(initializers = someInitializer.class)

Но у рассматриваемого теста нет аннотаций, подобных этому, не требуется контекст приложения, и должен пройтигладко и быстро, в соответствии с моим пониманием.Это выглядит примерно так:

public class SomeUnitTest{

    @Test
    public void testObjectOfClass(){
        SomeClass someClass= new SomeClass ("1", "2", "3", "4");

        SomeClass.assertThat(someClass).hasId("1-2-3-4");        
    }
}

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

1 Ответ

0 голосов
/ 18 июня 2019

Я видел это раньше, когда бегун JUnit неправильно синхронизировал время.

У меня был тест, который запускался менее чем за секунду, но медленно в полном тестовом прогоне.Он запускается непосредственно перед тестом с кучей настроек с плагинами и шагами @BeforeAll.Покопавшись в этом, я обнаружил, что таймер не переключался на следующий класс тестирования до тех пор, пока установка не будет завершена.

Возможно, вы видите то же самое, если в других тестах много предварительных тестов.setup.

EDIT: @BeforeAll определенно плохо рассчитан по времени.

public class TestA {
    @Test
    public void test() {
    }
}

public class TestB {
    @BeforeAll
    public static void before() throws InterruptedException {
        Thread.sleep(10000);
    }
    @Test
    public void test() {
    }
}

public class TestC {
    @BeforeAll
    public static void before() throws InterruptedException {
        Thread.sleep(10000);
    }
    @Test
    public void test() {
    }
}

enter image description here

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