Проблема Spring Test / JUnit - невозможно загрузить контекст приложения - PullRequest
1 голос
/ 19 мая 2010

Я использую Spring впервые и, должно быть, делаю что-то не так. У меня есть проект с несколькими реализациями Bean, и сейчас я пытаюсь создать тестовый класс с помощью Spring Test и JUnit. Я пытаюсь использовать Spring Test для добавления настроенного компонента в тестовый класс.

Вот мой test-applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=".............">
  <bean
    id="MyUuidFactory"
        class="com.myapp.UuidFactory" 
        scope="singleton" >
    <property name="typeIdentifier" value="CLS" />
  </bean>

  <bean id="ThingyImplTest"
        class="com.myapp.ThingyImplTest"
          scope="singleton">
     <property name="uuidFactory">
        <idref local="MyUuidFactory"   />
     </property>
</bean>
</beans>

Внедрение экземпляра MyUuidFactory сопровождается следующим кодом из тестового класса:

private UuidFactory uuidFactory;

public void setUuidFactory(UuidFactory uuidFactory) {
    this.uuidFactory = uuidFactory;
}

Однако, когда я запускаю тест (в Eclipse или командной строке), я получаю следующую ошибку (трассировка стека опущена для краткости):

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'MyImplTest' defined in class path resource [test-applicationContext.xml]:
Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException: 
Failed to convert property value of type 'java.lang.String' to required type 'com.myapp.UuidFactory' for property 'uuidFactory'; 
nested exception is java.lang.IllegalStateException: 
Cannot convert value of type [java.lang.String] to required type [com.myapp.UuidFactory] for property 'uuidFactory': 
no matching editors or conversion strategy found

Забавно то, что редактор XML Eclipse / Spring показывает ошибки, связанные с неправильным написанием любых типов или идентификаторов. Если я оставлю компонент, но закомментирую внедрение зависимости, все будет работать, пока я не получу исключение NullPointerException во время выполнения теста ... что имеет смысл.

1 Ответ

3 голосов
/ 19 мая 2010

Попробуйте <ref/>, а не <idref/>.

"Элемент idref - это просто защищенный от ошибок способ передачи идентификатора другого компонента в контейнере (элементу <constructor-arg/> или <property/>)."

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