2017-02-16 13 views
3

Я Хава этот код,@RunWith (SpringJUnit4ClassRunner.class) Не удается загрузить ApplicationContext с NULL 'ContextLoader'

@RunWith(SpringJUnit4ClassRunner.class) 
public class JunitDemo { 

    @Test 
    public void testAssertArrayEquals() { 

     byte[] expected = "trial".getBytes(); 
     byte[] actual = "trial".getBytes(); 

     Assert.assertArrayEquals("fail", expected, actual); 
    } 
} 

и запустить тест, есть ошибки

вызвано следующими причинами: java.lang.IllegalArgumentException: Невозможно загрузить ApplicationContext с помощью NULL 'contextLoader'. Рассмотрим аннотацию вашего тестового класса с @ContextConfiguration. на org.springframework.util.Assert.notNull (Assert.java:112) в org.springframework.test.context.TestContext.loadApplicationContext (TestContext.java:276) в org.springframework.test.context.TestContext. getApplicationContext (TestContext.java:304) ... 28 более

тогда, я же найти Q с SO, раствор

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration 
public class JunitDemo { 

    @Resource 
    private ApplicationContext ApplicationContext; 

    @Test 
    public void testAssertArrayEquals() { 

     byte[] expected = "trial".getBytes(); 
     byte[] actual = "trial".getBytes(); 

     Assert.assertArrayEquals("fail", expected, actual); 
    } 
} 

на самом деле, для этого POJO, я делать» nt нужна xml config. и я получу другую ошибку

Вызванный: java.io.FileNotFoundException: класс путь ресурса [/JunitDemo-context.xml] не может быть открыт, потому что не существует на org.springframework.core. io.ClassPathResource.getInputStream (ClassPathResource.java:158) на org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions (XmlBeanDefinitionReader.java:328) ... 37 более

Как правильно работать моя программа?

+0

У вас есть класс '@ Configuration' в вашем приложении? или вы используете конфигурацию на основе xml? –

+0

Прошу прощения, что так поздно, у меня нет конфигурационных файлов, и мне это не нужно. –

ответ

0

Добавить что-то вроде этого

@ContextConfiguration(locations = {"/test-spring.xml"}) 

где XML содержит контекст теста (в простейшем случае это то же самое, как контекст приложения) для загрузки/autowire всех зависимости

0

Из @ContextConfiguration документов:

@ContextConfiguration определяет метаданные уровня класса, которые используются для , определяют, как загрузить и настроить ApplicationContext для тестов интеграции. Сам

аннотации имеют свойство loader и док говорит:

Если не указано, то загрузчик будет унаследован от первого суперкласса, который с аннотацией @ContextConfiguration и определяет явный погрузчик. Если ни один класс в иерархии не указывает явный загрузчик , вместо него будет использоваться загрузчик по умолчанию.

По умолчанию конкретная реализация выбрана во время выполнения.

Таким образом, вы можете указать контекст loader напрямую с loader.Чтобы перейти к прямой конфигурации, используйте locations для xml и classes для аннотированной конфигурации класса.

В вас случае выглядит весной выбранной GenericXmlContextLoader для контекста загрузки, вы не указали местоположение так ApplicationConext будет загружен из «путь к классам:/ком/например/< ваш _test_class_name> -context.xml»

Это good article об этом.