2015-10-30 2 views
1

Я пытаюсь использовать Спрингс собственный Dependency Injection в тестовом Junit случае:Spring с JUnit тестирования и Dependency Injection не работает

import static org.hamcrest.CoreMatchers.equalTo; 
import static org.hamcrest.CoreMatchers.is; 
import static org.junit.Assert.assertThat; 

import org.binarisinformatik.api.AppConfig; 
import org.binarisinformatik.satzrechner.SatzRechner; 
import org.junit.Before; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.test.context.ContextConfiguration; 
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 


@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes=AppConfig.class) 
//@SpringApplicationConfiguration(classes = {AppConfig.class}) 
public class SatzRechnerTest { 

    @Autowired 
    private SatzRechner satzRechner; //SUT 

    @Before 
    public void setUp() { 
    // AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SatzRechnerTest.class); 
     //satzRechner=context.getBean(SatzRechner.class); 
    } 

    @Test 
    public void addiere_satz_4komma6_zu_zahlwert_10() { 

     assertThat("Addition von \"4,6\" ergibt nicht 10!", 
       satzRechner.summe("4,6"), is(equalTo(10))); 
    } 

Im тестирует класса имен SatzRechner, в которых Spring должны также autowire некоторые переменные. Вот мой класс под тест:

@Component 
public class SatzRechner { 

    @Autowired //@Inject 
    private Rechner taschenRechner; 
    @Autowired 
    private Zahlenfabrik zahlenfabrik; 

    public Integer summe(String zeichenSatz) { 
     return taschenRechner.summe(zahlenfabrik.erzeugeZahlen(zeichenSatz)); 
    } 
} 

И AppConfig.class, который использует в качестве Configurationfile выглядит следующим образом:

@Configuration 
@ComponentScan(value={"org.binarisinformatik"}) 
public class AppConfig { 
} 

Что здесь проблема?

+1

В чем проблема? – sidgate

+0

он не автоустанавливает переменные - imm получает nullpointerexception .... –

+0

'SatzRechner' похоже, находится в пакете' org.binarisinformatik.satzrechner'. добавьте его в 'componentScan' – sidgate

ответ

4

Если вы хотите использовать класс конфигурации Spring, у этого должны быть определения beans. Вы можете найти пример ниже: класс

Тест: класс

import static org.hamcrest.CoreMatchers.equalTo; 
import static org.hamcrest.CoreMatchers.is; 
import static org.junit.Assert.assertThat; 

import org.binarisinformatik.api.AppConfig; 
import org.binarisinformatik.satzrechner.SatzRechner; 
import org.junit.Before; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.test.context.ContextConfiguration; 
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 


@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes=AppConfig.class) 
public class SatzRechnerTest { 

    @Autowired 
    private SatzRechner satzRechner; 

    @Test 
    public void addiere_satz_4komma6_zu_zahlwert_10() { 

     assertThat("Addition von \"4,6\" ergibt nicht 10!", 
       satzRechner.summe("4,6"), is(equalTo(10))); 
    } 
} 

Конфигурация:

Вы должны объявить @Bean аннотированных методов. Эти бобы управляются весенним контейнером.

@Configuration 
public class AppConfig { 

    // Beans present here will be injected into the SatzRechnerTest class. 

    @Bean 
    public SatzRechner satzRechner() { 
     return new SatzRechner(); 
    } 

    @Bean 
    public Rechner taschenRechner() { 
     return new TaschenRechner(); 
    } 

    @Bean 
    public Zahlenfabrik zahlenfabrik() { 
     return new Zahlenfabrik(); 
    } 
} 

Примечание: Я позволю вам правильно обрабатывать возвращаемые типы здесь и параметры beans (если они присутствуют в вашем контексте).

-1

Есть две вещи, которые вы должны убедиться, прежде чем запустить тест, успешно:

1) Классы SatzRechner, Rechner & Zahlenfabrik должен быть в составе пакета «org.binarisinformatik» 2) Классы Rechner & Zahlenfabrik должны также аннотироваться с @Component как SatzRechner.

Смежные вопросы