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

}

SQL 错误: ORA-00988: 口令缺失或无效,创建数据库DBLink.

环境信息:
oracle 12C(其他数据库版本可能没有此问题)
问题描述:
在行 1 上开始执行命令时出错:
create database link LK_BGY
connect to BGY65_JY1223 identified by 12#
using ‘(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 20.10.130.208)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ora11g)
)
)’
命令出错, 行: 2 列: 39
错误报告:
SQL 错误: ORA-00988: 口令缺失或无效
00988. 00000 – “missing or invalid password(s)”
*Cause:
解决办法:
原来密码以数字开口必须用双引号,如上文密码为“12#”而非12#
引申:
oracle中的一些表示包括表名、字段名最好都别一数字开头,否则也得加上双引号。

Toolbar遮住了Fragment主界面的内容

描述:
app运行起来后,发现最上面一行内容没有显示,以为是出错了没有加载进来。但是在design时却能显示出来。后来经检查发现原来是被android的toolbar给遮住。这个现象在没有采用fragment直接布局在同一个xml文件时没问题,采用fragement代码加载时才出现的。
环境描述:
乐3巫本地布局文件有三:activity_main.xml,content_main.xml,msg.xml.
1)activity_main会include内容content_main.xml;
其中toolbar是在activity_main.xml中,其他都在content_main.xml中。
2)msg.xml是fragment布局文件,在mainactivity.java中通过fragmentManager加载进MainActivity中。
解决方式:
把ToolBat相关内容移到content_main.xml中,与其他控件并列放入到一个LinearLayout中即可。