--书写SQL语句-->
SELECT*FROMPerson
第四步:
创建实体类(Person)
packageyeepay.payplus;
/**
*Createdby维C果糖on2017/2/1.
*/
publicclassPerson{
privateIntegerid;
privateStringname;
privateIntegerage;
publicIntegergetId(){
returnid;
}
publicvoidsetId(Integerid){
this.id=id;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicIntegergetAge(){
returnage;
}
publicvoidsetAge(Integerage){
this.age=age;
}
@Override
publicStringtoString(){
return"Person{"+
"id="+id+
",name='"+name+'\''+
",age="+age+
'}';
}
}
第五步:
创建测试类(CeshiMyBatis)
packageyeepay.payplus.test;
importorg.apache.ibatis.io.Resources;
importorg.apache.ibatis.session.SqlSession;
importorg.apache.ibatis.session.SqlSessionFactory;
importorg.apache.ibatis.session.SqlSessionFactoryBuilder;
importorg.junit.Test;
importyeepay.payplus.Person;
importjava.io.IOException;
importjava.io.InputStream;
importjava.util.List;
/**
*Createdby维C果糖on2017/2/1.
*/
publicclassCeshiMyBatis{
@Test
publicvoidceshi()throwsIOException{
/**
*1、获得SqlSessionFactory
*2、获得SqlSession
*3、调用在mapper文件中配置的SQL语句
*/
Stringresource="sqlMapConfig.xml";//定位核心配置文件
InputStreaminputStream=Resources.getResourceAsStream(resource);
SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(inputStream);//创建SqlSessionFactory
SqlSessionsqlSession=sqlSessionFactory.openSession();//获取到SqlSession
//调用mapper中的方法:
命名空间+id
ListpersonList=sqlSession.selectList("yeepay.payplus/mapper.UserMapper.findAll");
for(Personp:
personList){
System.out.println(p);
}
}
}
在完成以上步骤后,咱们可以通过JUnit来测试框架是否搭建成功,具体使用JUnit进行测试的方法,可以通过阅读“基于JUnit单元测试的原理及示例”来了解更为详细的内容。
第2章基于JUnit单元测试的原理及示例
一、简介
JUnit是一个Java语言的单元测试框架,它由KentBeck和ErichGamma建立,逐渐成为xUnit家族中最为成功的一个。
JUnit有它自己的JUnit扩展生态圈,多数Java的开发环境都已经集成了JUnit作为单元测试的工具。
在这里,一个单元可以是一个方法、类、包或者子系统。
因此,单元测试是指对代码中的最小可测试单元进行检查和验证,以便确保它们正常工作。
例如,我们可以给予一定的输入测试输出是否是所希望得到的结果。
在本篇博客中,作者将着重介绍JUnit4.X版本的特性,这也是我们在日常开发中使用最多的版本。
二、特点
∙JUnit提供了注释以及确定的测试方法;
∙JUnit提供了断言用于测试预期的结果;
∙JUnit测试优雅简洁不需要花费太多的时间;
∙JUnit测试让大家可以更快地编写代码并且提高质量;
∙JUnit测试可以组织成测试套件包含测试案例,甚至其他测试套件;
∙Junit显示测试进度,如果测试是没有问题条形是绿色的,测试失败则会变成红色;
∙JUnit测试可以自动运行,检查自己的结果,并提供即时反馈,没有必要通过测试结果报告来手动梳理。
三、内容
3.1注解
∙@Test:
该注释表示,用其附着的公共无效方法(即用public修饰的void类型的方法)可以作为一个测试用例;
∙@Before:
该注释表示,用其附着的方法必须在类中的每个测试之前执行,以便执行测试某些必要的先决条件;
∙@BeforeClass:
该注释表示,用其附着的静态方法必须执行一次并在类的所有测试之前,发生这种情况时一般是测试计算共享配置方法,如连接到数据库;
∙@After:
该注释表示,用其附着的方法在执行每项测试后执行,如执行每一个测试后重置某些变量,删除临时变量等;
∙@AfterClass:
该注释表示,当需要执行所有的测试在JUnit测试用例类后执行,AfterClass注解可以使用以清理建立方法,如断开数据库连接,注意:
附有此批注(类似于BeforeClass)的方法必须定义为静态;
∙@Ignore:
该注释表示,当想暂时禁用特定的测试执行可以使用忽略注释,每个被注解为@Ignore的方法将不被执行。
/**
*JUnit注解示例
*/
@Test
publicvoidtestYeepay(){
Syetem.out.println("用@Test标示测试方法!
");
}
@AfterClass
publicstaticvoidpaylus(){
Syetem.out.println("用@AfterClass标示的方法在测试用例类执行完之后!
");
}
3.2断言
在这里,作者将介绍一些断言方法,所有这些方法都来自org.junit.Assert类,其扩展了java.lang.Object类并为它们提供编写测试,以便检测故障。
简而言之,我们就是通过断言方法来判断实际结果与我们预期的结果是否相同,如果相同,则测试成功,反之,则测试失败。
∙voidassertEquals([Stringmessage],expectedvalue,actualvalue):
断言两个值相等,值的类型可以为int、short、long、byte、char或者
java.lang.Object,其中第一个参数是一个可选的字符串消息;
∙voidassertTrue([Stringmessage],booleancondition):
断言一个条件为真;
∙voidassertFalse([Stringmessage],booleancondition):
断言一个条件为假;
∙voidassertNotNull([Stringmessage],java.lang.Objectobject):
断言一个对象不为空(null);
∙voidassertNull([Stringmessage],java.lang.Objectobject):
断言一个对象为空(null);
∙voidassertSame([Stringmessage],java.lang.Objectexpected,java.lang.Objectactual):
断言两个对象引用相同的对象;
∙voidassertNotSame([Stringmessage],java.lang.Objectunexpected,java.lang.Objectactual):
断言两个对象不是引用同一个对象;
∙voidassertArrayEquals([Stringmessage],expectedArray,resultArray):
断言预期数组和结果数组相等,数组的类型可以为int、long、short、char、byte或者java.lang.Object
四、JUnit3.X和JUnit4.X的区别
4.1JUnit3.X
(1)使用JUnit3.X版本进行单元测试时,测试类必须要继承于TestCase父类;
(2)测试方法需要遵循的原则:
∙public的;
∙void的;
∙无方法参数;
∙方法名称必须以test开头;
(3)不同的测试用例之间一定要保持完全的独立性,不能有任何的关联;
(4)要掌握好测试方法的顺序,不能依赖于测试方法自己的执行顺序。
/**
*用JUnit3.X进行测试
*/
importjunit.framework.Assert;
importjunit.framework.TestCase;
publicclassTestOperationextendsTestCase{
privateOperationoperation;
publicTestOperation(Stringname){//构造函数
super(name);
}
@Override
publicvoidsetUp()throwsException{//在每个测试方法执行[之前]都会被调用,多用于初始化
System.out.println("欢迎使用Junit进行单元测试...");
operation=newOperation();
}
@Override
publicvoidtearDown()throwsException{//在每个测试方法执行[之后]都会被调用,多用于释放资源
System.out.println("Junit单元测试结束...");
}
publicvoidtestDivideByZero(){
Throwablete=null;
try{
operation.divide(6,0);
Assert.fail("测试失败");//断言失败
}catch(Exceptione){
e.printStackTrace();
te=e;
}
Assert.assertEquals(Exception.class,te.getClass());
Assert.assertEquals("除数不能为0",te.getMessage());
}
}
4.2JUnit4.X
(1)使用JUnit4.X版本进行单元测试时,不用测试类继承TestCase父类;
(2)JUnit4.X版本,引用了注解的方式进行单元测试;
(3)JUnit4.X版本我们常用的注解包括:
∙@Before注解:
与JUnit3.X中的setUp()方法功能一样,在每个测试方法之前执行,多用于初始化;
∙@After注解:
与JUnit3.X中的tearDown()方法功能一样,在每个测试方法之后执行,多用于释放资源;
∙@Test(timeout=xxx)注解:
设置当前测试方法在一定时间内运行完,否则返回错误;
∙@Test(expected=Exception.class)注解:
设置被测试的方法是否有异常抛出。
抛出异常类型为:
Exception.class;
此外,我们可以通过阅读上面的第二部分“2注解”了解更多的注解。
/**
*用JUnit4.X进行测试
*/
importstaticorg.junit.Assert.*;
importorg.junit.After;
importorg.junit.AfterClass;
importorg.junit.Before;
importorg.junit.BeforeClass;
importorg.junit.Test;
publicclassTestOperation{
privateOperationoperation;
@BeforeClass
publicstaticvoidglobalInit(){//在所有方法执行之前执行
System.out.println("@BeforeClass标注的方法,在所有方法执行之前执行...");
}
@AfterClass
publicstaticvoidglobalDestory(){//在所有方法执行之后执行
System.out.println("@AfterClass标注的方法,在所有方法执行之后执行...");
}
@Before
publicvoidsetUp(){//在每个测试方法之前执行
System.out.println("@Before标注的方法,在每个测试方法之前执行...");
operation=newOperation();
}
@After
publicvoidtearDown(){//在每个测试方法之后执行
System.out.println("@After标注的方法,在每个测试方法之后执行...");
}
@Test(timeout=600)
publicvoidtestAdd(){//设置限定测试方法的运行时间如果超出则返回错误
System.out.println("测试add方法...");
intresult=operation.add(2,3);
assertEquals(5,result);
}
@Test
publicvoidtestSubtract(){
System.out.println("测试subtract方法...");
intresult=operation.subtract(1,2);
assertEquals(-1,result);
}
@Test
publicvoid