Autowiring de haricots générés par la méthode d'usine EasyMock?

J'ai un problème qui me semble vraiment étrange pour moi. J'ai la configuration suivante:

Une interface:

package com.example;

public interface SomeDependency {
}

Un printemps composant:

package com.example;

@Component
public class SomeClass {
}

Un ressort test de config avec un moqué de haricot généré par EasyMock:

<beans ....>
    <context:component-scan base-package="com.example"/>

    <bean id="someInterfaceMock" class="org.easymock.EasyMock" factory-method="createMock">
        <constructor-arg value="com.example.SomeDependency" />
    </bean> 
</beans>

Et d'une unité de test:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/testconfig.xml")
public class SomeClassTest {

    @Autowired
    SomeClass someClass;

    @Autowired
    SomeDependency someDependency;

    @Test
    public void testSomeClass() throws Exception {
        assertNotNull(someClass);
    }

    @Test
    public void testSomeDependency() throws Exception {
        assertNotNull(someDependency);
    }
}

Le projet compile et les tests passent sans aucun problème, à savoir permettra à l'autowiring de deux SomeClass (un "vrai" de l'objet) et SomeDependency (un objet fantaisie généré par EasyMock) réussir.

Cependant, si je change la mise en œuvre de SomeClass:

@Component
public class SomeClass {

    @Autowired
    SomeDependency someDependency;
}

les deux tests échouent car

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.example.SomeDependency] 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)}

Donc mes questions sont:

  1. Pourquoi le Printemps ne parviennent pas à autowire la dépendance à SomeClass (lorsqu'il réussit permettra à l'autowiring la même dépendance à SomeClassTest)?
  2. Comment puis-je changer la SomeClassTest ou testconfig.xml pour faire les tests pass?

Commentaire: En réalité, la classe représentée par SomeClass fait partie d'un cadre. Par conséquent, il ne peut être facilement mis à jour, au moins pas dans un délai raisonnable.

Dépendances:

  • Printemps: 3.0.5.COMMUNIQUÉ de
  • EasyMock: 3.0

Edit:

Dès le Printemps 3.2 RC1, le problème avec les génériques d'usine, les méthodes et les objets fantaisie a été résolu.

/Mattias

source d'informationauteur matsev