2017-01-18 3 views
8

Я работаю над довольно небольшим проектом (с точки зрения зависимостей), и всякий раз, когда я запускаю единичный тест, для загрузки JVM требуется 8 секунд, прежде чем запускать фактический тест в 0,2 с.JUnit время запуска медленное

Моя среда:

  • Java 8
  • Spring Tool Suite 3.8.1.RELEASE
  • JUnit 4
  • Windows 8

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

Действительное тест, который я пытаюсь запустить это:

public class TemplateLocationCalculatorTest { 

    private TemplateLocationCalculator target = new TemplateLocationCalculator(); 

    @Test 
    public void whenGivenRootReturnIndex(){ 
     Assert.assertEquals("index", target.calculate("/")); 
    } 
} 

и целевой класс:

public class TemplateLocationCalculator { 

    public String calculate(String string) { 
     return "index"; 
    } 

} 

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

+1

@PieterDeBie я сделал. Второй абзац. Производительность компьютерного оборудования не должна быть проблемой. – kinbiko

+0

Прочитано слишком быстро, удалил мой комментарий :) –

+1

Можете ли вы рассказать о том, что происходит в течение этих 8 секунд запуска? Вы можете попробовать подход, описанный в [этом вопросе] (http://stackoverflow.com/questions/39321345/how-do-measure-jvm-startup-time) для регистрации различных событий бутстрапа JVM. – apangin

ответ

2

OP здесь.

После suggestion given in the chat я использовал Microsoft Process Monitor и после много фильтрации я обнаружил, что программное обеспечение AV Avecto DefendPoint был запущен на моей машине, и что, казалось, что это было узкое. Всякий раз, когда я начинаю тест, он будет работать примерно на 25%, что, по-видимому, указывает на то, что он работает на полной скорости в одном потоке на одном из моих четырех ядер. Я не администратор на этом компьютере, поэтому я не смог отключить его, чтобы проверить эту гипотезу, но в целом, если другие люди должны увидеть эту проблему, проверьте, может ли это быть ваше антивирусное программное обеспечение.

-1

Потенциал reason может быть сканированием компонентов и автопогрузкой компонентов во время запуска. Вы можете ограничить это, создав отдельный файл config для тестов, которые ограничивают пространство для поиска компонентов, как описано here.

В конфигурации, вы можете либо lazy load beans<beans default-lazy-init="true"> или явно телеграфировать бобы (объясняется более подробно here)

<beans ...> 
    <!-- this bean will be injected into the OrderServiceTest class --> 
    <bean id="target" class="TemplateLocationCalculator" /> 

    <!-- other beans --> 
</beans> 

Тогда в классе тестов, мы указываем новый конфигурационный файл:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = { "classpath:/path/to/test-config.xml" }) 
public class TemplateLocationCalculatorTest { 

    @Autowired 
    private TemplateLocationCalculator target; 

    @Test 
    public void whenGivenRootReturnIndex(){ 
     Assert.assertEquals("index", target.calculate("/")); 
    } 

} 

@Bean 
public class TemplateLocationCalculator { 

    public String calculate(String string) { 
     return "index"; 
    } 

} 
+1

Spring не используется здесь. Это Spring Tool Suite (STS). Или вы имели в виду, что STS является autowiring под капотом, даже если запущен простой и простой JUnit-тест? – Roland

+0

STS - это плагин, который предварительно устанавливает компоненты Spring IDE - под капотом это еще пружина. Несмотря на то, что это всего лишь тест JUnit, приложение нужно строить и запускать, чтобы автоматическая проводка все же имела место. Идея здесь заключается в том, чтобы упростить этот процесс –

+0

ok ... Я имел в виду, что Spring не используется прямо здесь. Если STS делает некоторые проводки под капотом, что замедляет процесс, и ваш ответ решает, что все в порядке ;-) – Roland

Смежные вопросы