三
JU
nit
基础
3.1
下载地址
https://github.com/KentBeck/junit/downloads
3.2
基础使用方法
如果有这样一个工具栏,用来进行字符串的转换,将按照数据库命名的习惯进行格式化
,
格式化后的数据为小写字母,并且使用下划线分割命名单词
public
class
WordDealUtil {
public
static
String wordFormat4DB(String name){
if
(name==
null
)
{
return
null
;
}
Pattern p = Pattern.compile
(
"[A-Z]"
);
Matcher m = p.matcher(name);
StringBuffer sb =
new
StringBuffer();
while
(m.find()){
if
(m.start() != 0) {
m.appendReplacement(sb,
"_"
+ m.group());
}
}
return
m.appendTail(sb).toString().toLowerCase();
}
}
|
然后定义一个测试类,对上面的方法进行测试,
注意:
1.
每一个测试的方法使用注解
org.junit.Test
修饰
2.
测试方法必须是
public void
修饰,且不可以带任何参数
3.
可以使用的测试判断方法在
Assert
里面有定义,主要是
assertEquals
,
assertFalse
,
assertTrue
,
assertSame(
用来比较两个对象的引用是否相等
),assertNotSame(),assertNull, assertNotNull(),fail()(
用来抛出
AssertEorror
错误,用这个方法抛出异常进行模拟方法异常的情况
)
4.
JUnitCore.main
(
new
String[]{
"mytool.WordDealUtilTest"
});
表示调用这个类里面的
Test
注解过的方法开始测试了。
5.
如果失败了,会有两种结果,
failure
和
error
public
class
WordDealUtilTest {
@Test
public
void
wordFormat4DBNormal(){
String target =
"employeeInfo"
;
String result = WordDealUtil.wordFormat4DB
(target);
assertEquals
(
"employee_info"
,result);
}
@Test
public
void
wordFormat4DBNull(){
String target =
null
;
String result = WordDealUtil.wordFormat4DB
(target);
assertNull
(result);
}
@Test
public
void
wordFormat4DBEmpty(){
String target =
""
;
String result
= WordDealUtil.wordFormat4DB
(target);
assertEquals
(
""
,result
);
}
@Test
public
void
wordFormat4DB1(){
String target =
"EmployeeInfo"
;
String result = WordDealUtil.wordFormat4DB
(target);
assertEquals
(
"employee_info"
,result);
}
//
测试当尾字母为大写时的情况
@Test
public
void
wordFormat4DBEnd(){
String target =
"employeeInfoA"
;
String result = WordDealUtil.wordFormat4DB
(target);
assertEquals
(
"employee_info_a"
, result);
}
//
测试多个相连字母大写时的情况
@Test
public
void
wordFormat4DBTogether(){
String target =
"employeeAInfo"
;
String result = WordDealUtil.wordFormat4DB
(target);
assertEquals
(
"employee_a_info"
, result);
}
//JUnit
将测试失败的情况分为两种:
failure
和
error
。
//Failure
一般由单元测试使用的断言方法判断失败引起,它表示在测试点发现了问题;
//
而
error
则是由代码异常引起
public
static
void
main(String[] a){
JUnitCore.main
(
new
String[]{
"mytool.WordDealUtilTest"
});
}
}
|
3.3
Fixture
Fixture
是指在执行一个或者多个测试方法时需要的一系列公共资源或者数据,例如测试环境,测试数据等等。
JUnit
专门提供了设置公共
Fixture
的方法,同一测试类中的所有测试方法都可以共用它来初始化
Fixture
和注销
Fixture
。
使用一些注解,就可以在一些方法或者类之前或者之后进行一些操作,有点像
AOP
的感觉。。。
见下面的例子:
public class Example {
@BeforeClass
public static void init() {
System.out.println("before class:init() ...");
}
@AfterClass
public static void release() {
System.out.println("after class:release() ...");
}
@Before
public void before() {
System.out.println("
在方法执行前执行:
before()...");
}
@After
public void close() {
System.out.println("
方法结束后第一个执行
,close()..");
}
//
忽略测试
@Ignore("Not retry yet")
public void testIndexOut() {
System.out.println("
被忽略的方法被加入测试方法序列,但是没有执行?
Exception test...");
}
//
如果超时
1
秒钟就认为出错
,
并且可以捕获除以
0
的运算异常
@Test(timeout = 1000, expected = java.lang.ArithmeticException.class)
public void testTimeout() {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("-----------------
过了
1
秒之后打印出来的!
");
//
下面故意抛出一个运算异常
.
System.out.println(1 / 0);
}
//
测试捕获指定异常的测试用例
@Test(expected = java.lang.ArithmeticException.class)
public void testEception() {
System.out.println("-----------------
抛出异常之前
");
System.out.println(1 / 0);
System.out.println("
抛出异常之后
");
}
public Example() {
System.out.println("Example
构造函数
...");
}
public static void main(String[] args) {
JUnitCore.main(new String[] { "mytool.Example" });
}
/**
JUnit version 4.9b2
before class:init() ...
Example
构造函数
...
.
在方法执行前执行:
before()...
-----------------
过了
1
秒之后打印出来的!
方法结束后第一个执行
,close()..
Example
构造函数
...
.
在方法执行前执行:
before()...
-----------------
抛出异常之前
方法结束后第一个执行
,close()..
after class:release() ...
Time: 0.516
OK (2 tests)
**/
}
|
注意:
1.
上面还演示了两个很有用的
Test
的参数,
timeout
和
expected
。前者表示指定时间之后没有出结果,就默认为失败;后者表示期望可以抛出指定的异常,如果不是这个异常(或者没有抛出异常)就会失败!注意,没有异常也是测试失败!!
2.
注意上面调用了两次构造函数
!
3.
忽略测试的注解:
Ignore
4.
上面总共演示了这几种
Fixture
注解:
Before,After, BeforeClass,AfterClass,
Ignore,Test.
3.4
测试运行器,测试套件
JUnit
中所有的测试方法都是由它负责执行的。
JUnit
为单元测试提供了默认的测试运行器,但
JUnit
并没有限制必须使用默认的运行器。可以通过
RunWith
注解修改默认的测试运行器。
例如下面的,显示修改要在测试类上面使用的运行器:
@RunWith(CustomTestRunner.class)
public class TestWordDealUtil {
……
}
|
随着项目进度的开展,单元测试类会越来越多,可是直到现在还只会一个一个的单独运行测试类,这在实际项目实践中肯定是不可行的。为了解决这个问题,
JUnit
提供了一种批量运行测试类的方法
,叫做测试套件
建立一个测试套件的例子如下:
/**
*
一个测试套件的例子。
*
使用注解:
RunWith
:参数为
Suite
类
*
SuiteClasses
:参数为要放入测试套件的测试类组成的数组
,
可以有多个要测试的类!
*/
@RunWith(Suite.class)
@Suite.SuiteClasses({
WordDealUtilTest.class})
public class MyTestSuit {
public static void main(String[] a){
//
下面传入的参数是要调用的其他的测试的类,将会找那里的测试方法
.
//
这里的
MyTestSuit
包含了其他的测试类
WordDealUtilTest
,要保证不要出现循环调用。
<span style="font-family:
|
分享到:
相关推荐
标题 "ANT学习心得【第一部分】" 暗示了我们即将探讨的是Apache Ant,一个广泛使用的Java构建工具。在Java开发中,Ant是管理项目编译、打包、测试等任务的重要工具,它通过XML配置文件来定义构建过程。这篇博文可能...
"利用 Ant 和 JUnit 进行增量开发.ziw"这部分内容会介绍如何结合ANT与JUnit进行单元测试和持续集成,这对于Java项目的质量管理至关重要。增量开发意味着只编译和测试自上次构建以来修改过的部分,提高了开发效率。 ...
"Junit学习笔记.mht"可能是一位经验丰富的开发者对JUnit使用的心得体会,包含了一些实战中的技巧和最佳实践,如如何编写可读性高的测试代码,如何组织测试结构,以及如何利用JUnit与其他工具(如IDEs)集成等。...
4. **开发工具**:Java开发者常用的工具有Eclipse、IntelliJ IDEA、NetBeans等集成开发环境(IDE),以及Git进行版本控制,JDK(Java Development Kit)作为运行和编译Java程序的基础,还有如JUnit用于单元测试,...
3. **集成与测试**:书中还详细介绍了一些工具和技术,如Ant、Maven等自动化构建工具,JUnit、TestNG等单元测试框架,以及持续集成服务器如Jenkins的使用方法。 4. **安全性与性能优化**:通过介绍一些开源的安全性...
6. 社区互动:设立论坛或问答板块,让用户可以交流求职心得,互相学习。 四、技术选型与实现 1. 前端框架:React或Vue.js,结合Ant Design或Element UI等UI组件库,快速构建页面。 2. 后端框架:选择Express或...
9. **测试与调试**:为了确保软件质量,可能包含了单元测试、集成测试,使用了JUnit、Mocha、Jest等测试框架,以及日志记录工具如Log4j或 Winston。 10. **部署与运维**:项目可能部署在AWS、Azure或Google Cloud等...