2011-01-14 17 views
7

Estoy seguro de que me falta algo simple. bar se autoconecta en la prueba junit, pero ¿por qué la barra dentro de foo no se autoconecta?Autowire no funciona en la prueba junit

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration({"beans.xml"}) 
public class BarTest { 

    @Autowired 
    Object bar; 

    @Test 
    public void testBar() throws Exception { 
      //this works 
     assertEquals("expected", bar.someMethod()); 
      //this doesn't work, because the bar object inside foo isn't autowired? 
     Foo foo = new Foo(); 
     assertEquals("expected", foo.someMethodThatUsesBar()); 
    } 
} 
+0

¿Qué quieres decir con "bar inside foo"? – skaffman

Respuesta

12

Foo no es un frijol de primavera gestionado, usted lo está instaurando usted mismo. Entonces, Spring no va a autoconectar ninguna de sus dependencias por ti.

+2

heh. oh hombre, necesito dormir. eso es tan obvio ¡Gracias! – Upgradingdave

7

Usted acaba de crear una nueva instancia de Foo. Esa instancia no tiene idea sobre el contenedor de inyección de dependencia de Spring. Tienes que autowire foo en tu prueba:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration({"beans.xml"}) 
public class BarTest { 

    @Autowired 
    // By the way, the by type autowire won't work properly here if you have 
    // more instances of one type. If you named them in your Spring 
    // configuration use @Resource instead 
    @Resource(name = "mybarobject") 
    Object bar; 
    @Autowired 
    Foo foo; 

    @Test 
    public void testBar() throws Exception { 
      //this works 
     assertEquals("expected", bar.someMethod()); 
      //this doesn't work, because the bar object inside foo isn't autowired? 
     assertEquals("expected", foo.someMethodThatUsesBar()); 
    } 
} 
+0

tiene mucho sentido, muchas gracias! – Upgradingdave

Cuestiones relacionadas