2015-06-25 2 views
2

Я хочу добавить в мой проект ведение журнала (для консоли), в тестовой части - весной. У меня есть тест:Как добавить тестовый тест (весенний ботинок)?

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes = {TestConfig.class}) 
public class MyTest { 

    private final static org.slf4j.Logger LOGGER = LoggerFactory.getLogger(MyTest.class); 

    @Autowired 
    public UserDao userDao; 

    @Test 
    public void test1() { 
     LOGGER.info("info test"); 
     LOGGER.debug("debug test"); 
    } 
} 

и мой тестовый конфиг:

@Configuration 
@EnableJpaRepositories("example.dao") 
@ComponentScan(basePackageClasses = { MyServiceImpl.class}) 
@EntityScan({"example.model"}) 
@Import({DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class}) 
public class TestConfig { 

} 

я создаю application.properties файл в тестовом/ресурс. И Gradle видит мою папку ресурсов как ресурс для тестов. Мои application.properties:

logging.level.= INFO 
logging.level.tests.= INFO 
logging.level.org.hibernate= INFO 
logging.level.org.springframework= INFO 
logging.level.org.apache.cxf= INFO 

Но когда я запускаю мой тест, у меня есть:

16:59:17.593 [main] INFO tests.MyTest - info test 
16:59:17.594 [main] DEBUG tests.MyTest - debug test 

в консоли, почему? Я установил только 'INFO' (logging.level. = INFO), Почему 'DEBUG' в консоли? Как установить только 'INFO'?

+0

Это нормальный символ точки в конце logging.level и logging.level.tests? –

+0

Да, это нормально –

ответ

0

Попробуйте добавить @SpringBootConfiguration вместо @ContextConfiguration в свой класс MyTest.

Следуйте пример в справочном документе: http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-testing-spring-boot-applications

Весеннее загрузки приложения просто Spring ApplicationContext так ничего особенного не должно быть сделано, чтобы проверить его за то, что вы обычно делаете с ванильной весной контекст. Одна вещь, о которой нужно помнить, заключается в том, что внешние свойства, протоколирование и другие функции Spring Boot устанавливаются только в контексте по умолчанию, если вы используете SpringApplication для его создания.

+0

Спасибо, но это мне не помогает –

4

Это двухэтапный процесс.

Сначала добавьте spring-boot-starter-test в качестве тестовой зависимости. Затем скажите JUnit использовать ContextLoader только что добавленной зависимости.

Изменить

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes = {TestConfig.class}) 
public class MyTest { 
    ... 

в

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes = {TestConfig.class},  
         loader = SpringApplicationContextLoader.class) 
public class MyTest { 
    ... 

Контекст загрузчик живет в spring-boot-starter-test добавленным на первом этапе, и делает волшебство инициализации обычно выполняется с помощью ApplicationBootstrapper.

В зависимости от версии с пружинной загрузкой вы используете другие возможности (например, используя @SpringApplicationConfiguration вместо @ContextConfiguration). Вы можете узнать больше об этом в этой весенней блоге: https://spring.io/blog/2016/04/15/testing-improvements-in-spring-boot-1-4

+0

'SpringApplicationContextLoader' устарел от версии 1.4 в пользу аннотации тестового класса с помощью' @ SpringBootTest' или, если это абсолютно необходимо, с помощью 'SpringBootContextLoader'. В моем случае '@ ContextConfiguration' использовался для ссылки на файл' beans.xml', а '@ TestPropertySource' использовался для ссылки на файл' application.properties', где у меня были настройки уровня журнала. Новые уровни журналов вступают в силу только после запуска тестового класса. До этого вы все равно получите регистрацию DEBUG. – EdwinW

+0

** @ EdwinW ** Я использую '@ContextConfiguration (loader = AnnotationConfigContextLoader.class)', и это чрезвычайно шумно с деффером DEBUG. 'SpringBootContextLoader' просто выполняет правильное задание (хотя во время начальной загрузки он все еще печатает несколько внутренних сообщений DEBUG до тех пор, пока регистрация не будет выполнена с помощью' application.yaml'). Спасибо, что поделился! – gavenkoa

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