JUnit/Testng测试如何加载Spring框架的@Autowired属性。

问题描述:
写了一个configuration类负责spring配置,其他类标注@Component让spring自己装配。
想用JUnit/TestNG进行测试,没有Spring启动如何为这些@Component类和@Autowired属性赋值呢?
一下懵了,研究了半天。

被测代码:
1、spring配置DataConfiguration.java如下:

@Configuration
@Profile(“dev”)
@PropertySource(“classpath:/config/config_dev.properties”)
public class DataConfigDev extends DataConfig{
@Bean
public Green getGreen()
{
Green t= new Green();
t.setName(“ok”);
return t;
}
}

2、Green类如下
注意:没有标注@Component,因为在Configuration已经配置了@Bean构造了(也可以改用@Component方式)

/**
*
* @version 2016年7月16日 下午2:35:10
* @author Happy3W Cherry
*
*/
public class Green {

private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}

解决方案:
共找到了两种加载方式。
方法一 :采用SpringUnit框架。
1、测试类需要采用SpringUnit,代码示例如下:
/**
*
* @version 2016年7月16日 下午12:07:55
* @author Happy3W Cherry
*
*/
@RunWith(SpringJUnit4ClassRunner.class) //使用junit4进行测试
@ContextConfiguration
(classes={DataConfigDev.class}) //加载配置文件
@ComponentScan(basePackages = {“com.happy3w.autobuy”})
@ActiveProfiles(“dev”)
public class BaseTest {
}
其中@ActiveProfiles(”dev”)表示启动configuration中表为”dev”的配置(可以是java或xml)
2、写一个“GreenTest”继承BaseTest。
/**
*
* @version 2016年7月16日 下午2:36:41
* @author Happy3W Cherry
*
*/
public class GreenTest extends BaseTest{

@Autowired
public Green green;

@Test
public void testGetName() {
Assert.assertEquals(“ok”, this.green.getName());
}
}
方法二:AnnotationConfigApplicationContext手动配置加载。
1、创建一个GreenTestByManual 类
public class GreenTestByManual {
public Green green;

@Test
public void testGetName() {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.getEnvironment().setDefaultProfiles(“dev”);
ctx.register(DataConfigDev.class);
ctx.refresh();
this.green=ctx.getBean(Green.class);
Assert.assertEquals(“ok”, this.green.getName());
}

}