Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to write JUnit test with Spring Autowire?

Here are the files that I use:

component.xml

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"     xmlns:jee="http://www.springframework.org/schema/jee"     xsi:schemaLocation="http://www.springframework.org/schema/beans          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd          http://www.springframework.org/schema/context          http://www.springframework.org/schema/context/spring-context-3.0.xsd           http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd">      <context:component-scan         base-package="controllers,services,dao,org.springframework.jndi" /> </beans> 

ServiceImpl.java

@org.springframework.stereotype.Service public class ServiceImpl implements MyService {      @Autowired     private MyDAO myDAO;      public void getData() {...}     } 

ServiceImplTest.java

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath*:conf/components.xml") public class ServiceImplTest{      @Test     public void testMyFunction() {...} } 

Error:

16:22:48.753 [main] ERROR o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@2092dcdb] to prepare test instance [services.ServiceImplTest@9e1be92] org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'services.ServiceImplTest': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private services.ServiceImpl services.ServiceImplTest.publishedServiceImpl; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [services.ServiceImpl] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}     at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:287) ~[spring-beans.jar:3.1.2.RELEASE] 
like image 903
Premraj Avatar asked Feb 19 '14 11:02

Premraj


People also ask

Can you Autowire in JUnit?

Also note that we can wire other spring beans in our jUnit test classes using @Autowired annotation.

Can we use @autowired in test class?

To check the Service class, we need to have an instance of the Service class created and available as a @Bean so that we can @Autowire it in our test class. We can achieve this configuration using the @TestConfiguration annotation.

Can we use @autowired in spring?

In Spring, you can use @Autowired annotation to auto-wire bean on the setter method, constructor , or a field . Moreover, it can autowire the property in a particular bean. We must first enable the annotation using below configuration in the configuration file. We have enabled annotation injection.


1 Answers

Make sure you have imported the correct package. If I remeber correctly there are two different packages for Autowiring. Should be :org.springframework.beans.factory.annotation.Autowired;

Also this looks wierd to me :

@ContextConfiguration("classpath*:conf/components.xml") 

Here is an example that works fine for me :

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "/applicationContext_mock.xml" }) public class OwnerIntegrationTest {      @Autowired     OwnerService ownerService;      @Before     public void setup() {          ownerService.cleanList();      }      @Test     public void testOwners() {          Owner owner = new Owner("Bengt", "Karlsson", "Ankavägen 3");         owner = ownerService.createOwner(owner);         assertEquals("Check firstName : ", "Bengt", owner.getFirstName());         assertTrue("Check that Id exist: ", owner.getId() > 0);          owner.setLastName("Larsson");         ownerService.updateOwner(owner);         owner = ownerService.getOwner(owner.getId());         assertEquals("Name is changed", "Larsson", owner.getLastName());      } 
like image 144
Sembrano Avatar answered Oct 07 '22 09:10

Sembrano