2016-01-30 5 views
0

У меня есть FactoryBean (весна) определяется следующим образом:инъекционных издевались объектов с помощью FactoryBean

public class AMockFactoryBean extends EasyMockFactoryBean<A>{ 

    public AMockFactoryBean() { 
     super(A.class); 
    } 

    @Override 
    public A getObject() throws Exception { 
     MockA a= new MockA(); 
     a.setB(createMock(B.class)); 
     return new MockA(); 
    } 
} 

Класс А имеет объект типа B autowired:

public abstract class A { 

    @Autowired 
    protected B b; 

} 

MockA реализует несколько абстрактных классов и EasyMockFactoryBean использует метод Spring FactoryBean.

В моей app.xml конфигурации у меня есть:

<bean id="mockedA" class="AMockFactoryBean" /> 

Мой тестовый класс:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = "classpath:testContext.xml") 
public class ATest { 

    @Autowired 
    private A mockedA; 

} 

Результат: mockedA в ATEST является autowired правильно, но autowired поле Ab было установлено нулевое значение по весне. В режиме отладки я вижу, как вызывается getObject() в AMockFactoryBean и как mockedA получает экземпляр Mock для EasyMock. Но когда отладчик переходит в класс ATest, mockedA.b имеет значение null. Зачем?

ответ

0

Вы возвращаете return new MockA(); вместо a. Ваш код должен быть @Override public A getObject() throws Exception { MockA a= new MockA(); a.setB(createMock(B.class)); return a; }