簡體   English   中英

使用JUnit測試和依賴注入的Spring不起作用

[英]Spring with JUnit Testing and Dependency Injection does not work

我嘗試在Junit測試用例中使用Springs自己的依賴注入:

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

我正在測試一個名為SatzRechner的類,其中Spring也應該自動裝配一些變量。 這是我的測試類:

@Component
public class SatzRechner {

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

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

使用Configurationfile的AppConfig.class看起來像這樣:

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

這是什么問題?

如果要使用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)課程SatzRechner,Rechner和Zahlenfabrik應該在“org.binarisinformatik”包下2)課程Rechner和Zahlenfabrik也應該用@Component注釋為SatzRechner。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM