gpt4 book ai didi

java - 带有 JUnit 测试和依赖注入(inject)的 Spring 不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:22:26 24 4
gpt4 key购买 nike

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

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 还应该 Autowiring 一些变量。这是我正在测试的类(class):

@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 用作配置文件看起来像这样:

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

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

关于java - 带有 JUnit 测试和依赖注入(inject)的 Spring 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33433869/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com