开发者学堂课程【DAO 开发实战业务分析:业务测试(使用 Junit 测试)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/399/detail/5170
业务测试(使用 Junit 测试)
内容介绍
一、junit 测试的重要性
二、junit 测试的步骤
三、总结
一、junit 测试的重要性
如果要进行业务测试,所有的开发之中都一定会通过 Junit 测试组件负责完成。
二、junit 测试的步骤
1、选中要测试的业务接口:
在整个过程之中,要求在图中蓝色区域先选中要测试的代码,因为所有的业务方法的名称都在 service 接口中。
2、创建 junit 测试用例:
在左上角新建一个 Junit ,选择测试 junit 的测试用例 Test Case,再选择下一步。
3、将所有的 junit 测试类都保存在:cn.mldn.oracle.test.junit 包下
关键性的问题在于如果想要更好的进行测试,选择 JUnit4 而不要选择 Junit3,因为存在大量数据且要进行一个先增加再进行取得再删除再修改的测试,要考虑到测试顺序的问题。
4、选择要进行测试的方法
全部选择,所有的方法都会进行测试处理。
5、会询问用户是否要将 junit 测试包配置到“Build Path”之中
必须选是,否则单独去解释测试包过于麻烦
6、为了保证进行测试的顺序,junit4 里面提供有一个注解,可以根据方法名称定义执行的顺序。
在import
org.junit
.runners.MethodSorters;
代码下跟上
@
F
ix
M
ethod
O
rder
(MethodSorters.NAME_ASCENDING)
,
即按照名称升序。名称升序即为像 testAdd、testUpdate 等字母升序,如做以下测试来进行验证先后执行的问题,在 public
void
test
A
dd()
{
跟上System.
out.println(“*****ADD******
“);
,在public
void
test
R
emove()
{
跟上System.
out.println(“*****REMOVE******
“):
,在public
void
test
G
et()
{
跟上System.
out.println(“*****GET******
“);,在public
void
test
L
ist()
{
跟上System.
out.println(“*****LIST******
“);
,在public
void
test
L
ist
S
tring
S
tring
I
nt
I
nt()
{
跟上System.
out.println(“*****LIST4******
“);,
然后得出执行结果是按照顺序执行。如果分不清楚顺序就按照应有的顺序在 test 后加上对应的数字进行执行。
然后在整个测试过程中,有一个前提条件是主键与电话不能重复,在public
class
IM
ember
S
ervice
T
est
{
下跟上private
static
S
tring
mid
;一个值,
再跟上private
static
S
tring
phone
;一个值,再跟上static { // 静态块,跟上Random
rand
=
new
R
andom() ;
再跟上int
temp
=
rand
.next
I
nt()
;
来进行取值。假设跟上1000,即int
temp
=
rand
.next
I
nt(1
000
)
;
,
跟上 mid = ”测试ID –“ + temp ;,再跟上 mid = ”测试 PHONE –“ + temp ;,
这样就可以保证在整个过程中 static 执行一次操作后都能取得一个 id 和一个 phone。
接下来进行测试,在 Member mem = new Member() ;后跟上 mem.setMid(mid) ;,
接下来再跟上 mem.setPhone(phone) ;,再跟上 mem.setAge(10) ;,
接下来再跟上 mem.setBirthday(new Date()) ;,因为其他字段都不是起决定性因素的字段,但其他字段都要求把值设置再跟上 mem.setName(“啊黄啊黄“) ;,
再跟上 mem.setNote(“不是人“) ;,找到一个业务层接口对象,在private static String phone ;
后跟上 private
static
IM
emebr
S
ervice
service
;,然后在 mid = ”测试 PHONE –“ + temp ;后跟上 service
=
S
ervice
F
actory.get
I
nstance(Member
S
ervice
I
mpl.class);
进行识别,后面的调查测试则是通过在mem.setNote(“不是人“) ;
后跟上Test
C
ase.
assertTrue(service.add(mem));,
但现在存在一个对象数据库连接取得问题,
所以要将
S
ervice
F
actory.get
I
nstance(Member
S
ervice
I
mpl.class)
;放在 public void testAdd(){下面,数据库连接在每一次创建service子类的时候才会创建一次连接,所以如果放在上面的话下面将无法取值。
因此如果测试 add 返回的结果为 true,则说明测试通过。接下来要进行修改,mid不变,将年龄改为30岁,“啊黄啊黄”改为“不黄”,“不是人”改为“cai guai”,
将Test
C
ase.
assertTrue(service.add(mem))
;的 add 改为 edit 后,如果返回的结果是true也是正确的。其次get如果返回的值不是空则是正确的,在 get 后跟上 T
e
st
C
ase.assert
N
ot
N
ull(object);
,将业务层对象运用到此处,将原代码跟上 T
e
st
C
ase.assert
N
ot
N
ull(service
.get(mid)
);
,仍旧用同一个 id 进行测试。
而在 list 中如果取到的集合大于零则表示成功,所以在list后跟上T
e
st
C
ase.assert
T
rue(
service.
list().
size
(
) > 0
)
;,则表示数据取得。而在 public void testListIntInt(){中也应该大于零,即
T
e
st
C
ase.assert
T
rue(
service.
list(1,1
0
).
size
(
) > 0
)
;,而 service.list 的返回结果为
Map<
S
tring,
O
bject
>
map
=
service.list
();,
就需要先接收值,跟上long
count
=
(Long
)
m
ap
.
get(“memberCount”)
;,然后要判断count 的值是否大于零并且要求判断 all.size()的值大于零,即在long
count
=
(Long
)
m
ap
.
get(“memberCount”);
后跟上List<
M
ember
>
all
=
(List<
M
ember
>
) map.get(“all
M
embers”)
,在此基础之上,如果满足T
e
st
C
ase.assert
T
rue(count
> 0 &&
all
.
size
() > 0)
;,则可以进行数据查询。在public
void
test
6L
ist
S
tring
S
tring
I
nt
I
nt()
{
中,则跟上
Map<
S
tring,
O
bject
>
map
=
service.list
(“
name
”,”
黄
”,1,10);,
写完测试后可以一起测试也可以分开测试,但分开测试要注意 id 的变化,因为每一次执行都要生成一个新的 mid。测试完成之后需要将数据删除,则跟上 Set<
S
tring
>
set
=
new
H
ash
S
et<
S
tring
>() ;,
跟上 set.add(mid) ,
跟上 T
e
st
C
ase.assert
T
rue(service
.
remove
(
ids
));,
再用set进行删除后再次进行测试则测试通过。如果测试都通过,返回的结果都为绿色,则表示这个业务在当前的环境下已经正常通过,可以交给其他开发者进行使用。以后的项目开发都要求编写 junit 测试。
三、总结
一个最基础的 DAO 设计模式已经成功完成。