您的位置:首页 > 编程语言 > Java开发

Java之Junit单元测试、包含Log4j、classpath说明等

2017-01-13 00:00 369 查看
单元测试对项目的某个方法/借口进行单独测试,避免反复重启项目调试,影响工作效率。

以下为Spring Test 整合JUnit4(需要Spring bean注入等),普通方法测试只需引用Junit包配合@Test使用。idea右键Make directory as Test Sources Root后,在要测试的方法ctrl + shift + T即可生成测试类。

Junit

1. 加入依赖包

  使用Spring的测试框架需要加入以下依赖包:

JUnit 4 (官方下载:https://github.com/KentBeck/junit/downloads

Spring Test (Spring框架中的test包)

Spring 相关其他依赖包(不再赘述了,就是context等包)

2. 创建测试源目录和包

  在此,推荐创建一个和src平级的源文件目录,因为src内的类都是为日后产品准备的,而此处的类仅仅用于测试。而包的名称可以和src中的目录同名,这样由于在test源目录中,所以不会有冲突,而且名称又一模一样,更方便检索。

3. 创建测试类

  创建一个测试用的类,推荐名称为 “被测试类名称 + Test”。

  测试类应该继承与 AbstractJUnit4SpringContextTestsAbstractTransactionalJUnit4SpringContextTests

  对于 AbstractJUnit4springcontextTests 和 AbstractTransactionalJUnit4SpringContextTests 类的选择:

  如果再你的测试类中,需要用到事务管理(比如要在测试结果出来之后回滚测试内容),就可以使用AbstractTransactionalJUnit4SpringTests类。事务管理的使用方法和正常使用Spring事务管理是一样的。再此需要注意的是,如果想要使用声明式事务管理,即使用AbstractTransactionalJUnitSpringContextTests类,请在applicationContext.xml文件中加入transactionManager bean:

<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>

  如果没有添加上述bean,将会抛出NoSuchBeanDefinitionException,指明 No bean named 'transactionManager' is definded.

4. 配置测试类

  添加如下内容在class前,用于配置applicationContext.xml文件的位置。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")


5. 创建测试方法

  创建测试用方法,推荐名称为 “被测方法名称+ Test”。

  测试方法上方加入 @Test

6. 通过JUnit 4 执行

  右键方法名,选择则“Run As”→“JUnit Test”即可

classpath:与classpath*:

classpath对应项目编译文件的输出路径。相当于SpringMVC的.../class/,若class下conf有所需配置文件app-context.xml,只需classpath:conf/app-context.xml即可获取。classpath:表示获取指定路径第一个加载的文件,而classpath*:表示获取指定路径的全部文件。

Log

日志级别分为五级:debug、info、warn、error、fartal

=== Debug ===
这个级别最低的,一般的来说,在系统实际运行过程中,一般都是不输出的。
因此这个级别的信息,可以随意的使用,任何觉得有利于在调试时更详细的了解系统运行状态的,
比如变量的值等等,都输出来看看也无妨。

=== Info ===
这个应该用来反馈系统的当前状态给最终用户的,所以,在这里输出的信息,应该对最终用户具有实际意义,
也就是最终用户要能够看得明白是什么意思才行。
从某种角度上说,Info 输出的信息可以看作是软件产品的一部分(就像那些交互界面上的文字一样),
所以需要谨慎对待,不可随便。

=== Warn、Error、Fatal ===
警告、错误、严重错误,这三者应该都在系统运行时检测到了一个不正常的状态,他们之间的区别,
要区分还真不是那么简单的事情。我大致是这样区分的:
所谓警告,应该是这个时候进行一些修复性的工作,应该还可以把系统恢复到正常状态中来,
系统应该可以继续运行下去。
所谓错误,就是说可以进行一些修复性的工作,但无法确定系统会正常的工作下去,系统在以后的某个阶段,
很可能会因为当前的这个问题,导致一个无法修复的错误(例如宕机),但也可能一直工作到停止也不出现严重问题。
所谓严重错误,可以肯定这种错误已经无法修复,并且如果系统继续运行下去的话,可以肯定必然会越来越乱。
这时候采取的最好的措施不是试图将系统状态恢复到正常,而是尽可能地保留系统有效数据并停止运行。
选择 Warn、Error、Fatal 中的具体哪一个,是根据当前的这个问题对以后可能产生的影响而定的,
如果对以后基本没什么影响,则警告之,如果肯定是以后要出严重问题的了,则Fatal之,拿不准会怎么样,则 Error 之。


log4j

Spring Test前缀加@RunWith(SpringJunit4ClassRuner.class)是无法获取到log4日志配置文件,需把RunWith的类更改为新类,并对log4进行处理。

例如:RunWith(Junit4ClassRuner.class)

public class Junit4ClassRuner extends SpringJunit4ClassRuner {

static {
try {
log4configurer.initLogging("classpath:conf/log4j.xml");
} catch (FileNotFoundException e) {
system.err.printf("cannot initialize log4j")

}

}
public Junit4ClassRuner (Class<?> clazz ) throw InitializetionError {
super(clazz);
}
}


Idea的日志位置 C:/用户/Aministrator/.IntelliJIdea2016.2/system/tomcat
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: