-1

根据文档,spring boot 将自动检查在使用 @Configuration 注释的任何类中创建的 bean 类对象,并将覆盖该类的默认 bean,并返回具有定义时注入的任何属性的对象。但是当我在 junit 中测试这个应用程序时,它不会返回任何被注入的值。我所有的类都定义在同一个包中我的代码如下,

//引擎类

package com.test.simpletest;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class Engine {

private String msg;

public Engine() {
    System.out.println("Engine class is being called");
}

public String getMsg() {
    return msg;
}

public void setMsg(String msg) {
    this.msg = msg;
}
}

//测试配置类

package com.test.simpletest;

import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.Configuration;

@Configuration
public class TestConfiguration{

@Bean
public Engine engine() {
    Engine eng = new Engine();
    eng.setMsg("Message is being called");
    return eng;
}
}

//Spring启动主应用

package com.test.simpletest;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SimpleTestExampleApplication {

public static void main(String[] args) {
    SpringApplication.run(SimpleTestExampleApplication.class, args);
}
}

//JUnit测试类

package com.test.simpletest;

import org.junit.Test; 
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.ApplicationContext;
import 
org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class SimpleTestExampleApplicationTests {

@Autowired 
private Engine engine; 

@Test
public void contextLoads() {

    engine.getMsg();

//Both above and below approach does not work 

//      ApplicationContext apx = new 
AnnotationConfigApplicationContext(TestConfiguration.class);
//      Engine engine = (Engine)apx.getBean(Engine.class);
//      engine.getMsg();
}
}

请帮助我找到解决上述问题的方法。

4

2 回答 2

1

演示应用

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);

    }
}

引擎

public class Engine {
    private String msg;

    public Engine() {
        System.out.println("Engine class is being called");
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}

测试配置

@Configuration
public class TestConfiguration {
    @Bean
    public Engine getEngine() {
        Engine eng = new Engine();
        eng.setMsg("Message is being called");
        return eng;
    }
}

DemoApplicationTests

@RunWith(SpringRunner.class)
@SpringBootTest
@Import(TestConfiguration.class)
public class DemoApplicationTests {

    @Autowired
    private Engine engine;

    @Test
    public void contextLoads() {
        System.out.println("engine : " + engine.getMsg());
    }

}

输出

Engine class is being called
engine : Message is being called
于 2018-01-11T15:19:02.983 回答
-1

您能否从 Engine 类中删除 @Component 并重试。我想它应该可以正常工作。

于 2018-01-11T12:45:28.797 回答