发表于: 2017-08-31 22:18:56
2 1131
一、 今天完成的事情
Q20-21
1. 单元测试
1) 补充一下eclipse配置junit4步骤:进入项目的properties / Java Build Path / Libaries / Add Library / Junit / Next / junit4 / finish / 搞定
2) Junit注解:
@Test:将一个普通方法修饰称为一个测试方法
@Test(expected=XX.class):预期抛出的异常
@Test(timeout=毫秒):限定运行时间
@BeforeClass:使被修饰的方法在所有其它方法运行前运行一次,被static修饰
@AfterClass:使被修饰的方法在所有其它方法运行前运行一次,被static修饰
@Before:使被修饰的方法在每一个测试方法运行前运行一次
@Before:使被修饰的方法在每一个测试方法运行后运行一次
@Ignore:使被修饰的测试方法不被执行测试
3) 单元测试代码:使用上一篇日报中spring的ApplicantDao作为被测试接口
测试结果:
4) 单元测试小结:
测试方法必须使用@Test注解修饰;
测试方法必须使用public void修饰,且不带参数;
测试方法放在src/test目录下,且其包名与被测试类包名保持一致;
测试单元中的每个方法必须可以独立测试;
测试类使用Test作为类名后缀,测试方法使用test作为方法名前缀;
5) 扩展:
同时测试类中所有方法:
右键类名/run as/junit
同时测试多个类所有方法:使用测试套件
测试套件是组织多个测试类同时运行的,通过一个不含其他方法的入口类,更改测试运行器Suite.class,将要测试的类作为数组传入到Suite.SuiteClasses({,,,…})
6) 报错示例(区别Failures和Errors):
7) 测试报错小结:
Failure一般由单元测试使用的断言方法判断失败所引起的,表示测试点发现问题,程序输出结果与预期不符;
Error是由代码异常引起的,它可能是测试代码本身的错误,也可能是被测试代码中的bug
摘抄的一句话(半知半解):测试用例不是用来证明你是对的,而是用来证明你没有错
2. 查看日志,并转成Debug模式,练习调试,学会查看单步执行时的变量值。
1)查看Java的日志是通过一个操作包——log4j(log for java)
2)log4j 有两个版本,log4j和log4j2。前者使用的是.properties文件作为主配置文件,后者则是通过.xml \ .json \ .jsn 等方式
3)以下我决定分别尝试使用log4j和log4j2
配置log4j:
通过在maven的pom.xml加入以下标签,建立起依赖关系,导入jar包
并将log4j.properties文件放在resource路径下面
然后创建一个测试类,编写测试代码:
注:logger是一个日志对象,用于操作日志信息,上图代码中用到的方法分别对应不同日志级别,其中Fatal级别最高,Trace级别最低
Fatal:重大错误,最高级别。
Error:错误信息。
Warn:警告信息。
Info:输出感兴趣的或重要的信息
Debug:调试信息。
Trace:追踪信息,最低级别,一般不用,不然信息量太大。
接着我们查看一下运行结果:
发现只有INFO级别以上的信息,这是怎么回事?
我们可以通过解析上文提到log4j.properties的配置文件,查明原因。
在文件第2行发现这一语句:
意思允许INFO级别以上的日志信息写到stdout和file。
那么stdout和file是什么?
在第5行和第11行发现了定义了这两个“追加器”:
显然,对于只输出INFO级别以上信息的原因已经查明。
继续解析其它语句:
Stdout的目标是system.out这个类
设置信息的输出格式
设置file在执行目录下创建文件并存储日志信息
允许新的日志信息追加写入文件
文件最大容量为100KB
配置log4j2:
依旧通过maven搭建对log4j2的依赖关系:
测试类代码类似Log4jTest,故此跳过
解析log4j2.xml文件,由于文件内容比较多,我直接注释在文件中:
执行结果:项目根目录下多个两个文件夹,用于存储日志信息
最后,个人理解log4j就是输出语句(System.out.print)的增强
Debug模式练习:
设断点——》点击Debug xxx,开始调试
Step into:执行下一步,遇到方法时会进入方法。
Step over:执行下一步,遇到方法会跳过方法
Step return:跳出方法,或者说终止方法
3. Q22服务部分
1) 购买云服务器(我选了阿里云),然后esc远程连接
2) 本地下载Xshell5.0,远程连接,步骤参考阿里云https://help.aliyun.com/video_detail/41677.html
3) 待续。。。
4. 补充:JDBC连接数据库
代码如下:
注意:
步骤6中结果集query不能在没有query.next()方法的判断下直接取值。否则会抛出异常:java.sql.SQLException: Before start of result set
扩展:通过c3p0连接池连接数据库
c3p0是Hibernate、spring底层所使用的连接池
只需要更换通过jdbc连接的前两步骤,代码如下:
注:ds自动读取src目录下的c3p0.properties配置文件(展示如下)
二、 明天计划的事情
完成到Q23,学习linux命令,emmmmm……总是不能按计划完成
三、 遇到的问题
1) 镜像是什么鬼?刚刚听师兄说到,买服务器的时候也有,自己百度了好久,结论,看不懂,好抽象。
2) “部署数据库到远程DB”这句话的意思是将sql文件发过去吗?还是什么?
3) 感觉云服务器这块好难,有点摸不着头绪
四、 收获
1) junit的使用(像注解、断言、测试套件等)
2) log4j的使用
评论