2010-11-17 3 views
0

Я пытаюсь узнать, как использовать applicationContext. Моя цель - обмен файловым хранилищем данных реального времени при использовании моих модульных тестов. Я не хочу делать это явно, я хочу сделать это с помощью инъекции зависимостей.Почему мой боб пустой?

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

@ContextConfiguration(locations = "/applicationContext.xml") 
public class ResultsListTests { 

    @Resource 
    CompanyResult resultBean; 

    @Test 
    public void shouldAddResults() { 
     assertEquals(resultBean.getCompanyName(), "Microsoft"); 

Но мой результатBean всегда равен нулю. Вот мой applicationContext.xml, который находится под WebContent/WEB-INF:

<?xml version="1.0" encoding="UTF-8"?> 
<beans> 
    <bean id="resultBean" name="resultBean" class="com.trgr.cobalt.company.domain.CompanyResult"> 
     <property name="companyName"> 
      <value>Microsoft</value> 
     </property> 
    </bean> 
</beans> 

Так почему же мой resultBean всегда нуль? Что я сделал неправильно?

ответ

1

Вы пропускаете @RunWith(SpringJUnit4ClassRunner.class) аннотацию:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = "/applicationContext.xml") 
public class ResultsListTests { 

    @Resource 
    CompanyResult resultBean; 

    @Test 
    public void shouldAddResults() { 
     assertEquals(resultBean.getCompanyName(), "Microsoft"); 
    } 
} 

BTW, в вашем образце, WebContent/WEB-INF не является надлежащим местом для applicationContext.xml.

Если указать @ContextConfiguration(locations = "/applicationContext.xml") то весна будет искать applicationContext.xml в корне классам, а не в WebContent/WEB-INF (JUnit является 100% не знают о том, что это веб-приложение).

Для получения дополнительной информации, см. Spring reference documentation.

+0

Благодарим вас за ответ. Два вопроса. 1) SpringJUnit4ClassRunner не может быть разрешен для типа. Что с этим? 2) Хотя полезно знать, что мой applicationContext.xml находится не в том месте, было бы намного полезнее узнать правильное место, чтобы его поместить («корень пути к классам» для меня не имеет большого значения, поскольку Я очень новичок в Spring и Java). Я прочитал главу о BeanFactory и ApplicationContext и, судя по всему, они ожидают, что вы узнаете, где это происходит. – Samo

+0

Какую версию весны вы используете? И как ваш проект организован (макет исходной папки)? –

+0

Я использую 3.0.5. Мои ресурсы Java содержат папку src и несколько тестовых папок. В моей папке src ничего нет, кроме пакетов. Мне сказали, что я должен добавить папку ресурсов в разделе Ресурсы Java и разместить там свой applicationContext.xml, а затем я могу ссылаться на нее с помощью WEB-INF/classes/applicationContext.xml. Мне непонятно, как ресурсы Java/ресурсы сопоставляются с WEB-INF/классами, но это было бы не в первый раз, когда я был расстроен тем, что Java настаивает на дыме и зеркалах, когда дело доходит до структуры папок. В любом случае, согласны ли вы с этим или у вас есть другое предложение? – Samo