使用JUnit测试和依赖注入的Spring不起作用

时间:2015-10-30 10:32:02

标签: java spring testing junit dependency-injection

我尝试在Junit测试用例中使用Springs自己的依赖注入:

geeraerd
LOG10N ~ LOG10Nres + log10((10^(LOG10N0 - LOG10Nres) - 1) * exp(kmax * 
    Sl)/(exp(kmax * t) + (exp(kmax * Sl) - 1)) + 1)

我正在测试一个类名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))); } ,其中Spring也应该自动装配一些变量。这是我的测试类:

SatzRechner

用作Configurationfile的@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

这是什么问题?

2 个答案:

答案 0 :(得分:7)

如果要使用Spring配置类,则必须具有bean定义。请在下面找到一个例子:

测试类:

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注释方法。这些bean由Spring容器管理。

@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();
    }
}

注意:我让你正确处理这里返回的类型和bean参数(如果在你的上下文中存在)。

答案 1 :(得分:-1)

在成功运行测试用例之前,您必须确保两件事:

1)课程SatzRechner,Rechner& Zahlenfabrik应该在“org.binarisinformatik”包下 2)课程Rechner& Zahlenfabrik也应该用@Component注释为SatzRechner。