发表于: 2017-07-09 20:52:17
2 1380
一.今天完成的主要任务
1.学习junit并用junit编写SpringJDBC的单元测试
首先,是一些知识点
1).JUnit 4 开始使用 Java 5 中的注解(annotation),常用的几个 annotation 介绍:
@BeforeClass:针对所有测试,只执行一次,且必须为static void
@Before:初始化方法
@Test:测试方法,在这里可以测试期望异常和超时时间
@After:释放资源
@AfterClass:针对所有测试,只执行一次,且必须为static void
@Ignore:忽略的测试方法
一个单元测试用例执行顺序为:
@BeforeClass –> @Before –> @Test –> @After –> @AfterClass
每一个测试方法的调用顺序为:
@Before –> @Test –> @After
@Ignore
忽略该注解标识的方法的测试
2).断言执行结果
可以通过断言,判断方法的执行结果是否和预期一致
3).断言异常
通过断言异常判断方法执行是否会遇到期望的异常.
第一种是try…catch…,这种方式很麻烦,代码很多很乱
第二种是@Test注解之后增加期望异常,这种方式只能判断一个异常
第三种是@Rule注解.这种方式可以判断方法中出现的多个异常
接着是为springJDBC链接数据库中的接口实现编写单元测试
首先是在工程中要添加spring-test,和junit的依赖
其次在项目工程的test文件下创建测试类,工程目录如下
然后是一一编写测试方法
//junit可以运行很多测试类,一般是默认的测试类,添加@RunWith注解,使该类使用SpringJUnit4ClassRunner类
@RunWith(SpringJUnit4ClassRunner.class)
//locations的值是spring配置文件的路径,前面的classpath:的意思是在工程目录下找
@ContextConfiguration(locations={"classpath:Beans.xml"})
public class UserDaoImplateTest {
List<User> list = new ArrayList<User>();
@Autowired
private UserDaoImplate userDaoImplate;
@BeforeClass
public static void testSetDataSource() {
//配置数据库连接池
DriverManagerDataSource dataSource=new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=true&serverTimezone=UTC");
dataSource.setUsername("root");
dataSource.setPassword("zx95271314");
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
}
//通过添加@Rule注解的方式断言异常,expectedEx只用定义一次,后面的测试方法都可以使用,更为灵活方便
@Rule
public ExpectedException expectedEx = ExpectedException.none();
@Test
public void testCreateTable(){
String[] tableName = {"tableTemp1", "tableTemp2", "tableTemp3"};
for (String string : tableName) {
userDaoImplate.createTable(string);
}
//尝试向数据库中添加一个已经存在的表
String table = "tableTemp1";
//断言会报BadSqlGrammarException异常
expectedEx.expect(BadSqlGrammarException.class);
userDaoImplate.createTable(table);
}
@Test
public void testAddUser() {
User user = new User();
for (long i=0; i<3; i++){
user.setId(i+1);
user.setName("tom" + i+1);
user.setPassword("gggggg" + i+1);
userDaoImplate.addUser(user);
}
//执行完插入数据测试方法后的结果
}
//通过@After注解,使每一个测试方法执行完毕后都会遍历一次数据表,方便查看结果
@After
public void testQueryAllUser() {
list = userDaoImplate.queryAllUser();
for (User user : list) {
System.out.println(user.toString());
}
}
@Test
public void testQueryUserByID() {
User user;
user = userDaoImplate.queryUserByID(1);
System.out.println(user.toString());
user = userDaoImplate.queryUserByID(3);
System.out.println(user.toString());
//断言报出空结果集数据请求异常,因为数据表中没有id为5的数据
expectedEx.expect(EmptyResultDataAccessException.class);
user = userDaoImplate.queryUserByID(5);
System.out.println(user.toString());
}
@Test
public void testDeleteUserByID() {
//删除前先对数据表进行一次遍历
testQueryAllUser();
System.out.println("-------------------------------");
userDaoImplate.deleteUserByID(2);
}
//执行完删除数据测试方法后的结果
@Test
public void testUpdateUser(){
User user;
user = userDaoImplate.queryUserByID(2);
user.setName("tttttt");
user.setPassword("编号wer");
userDaoImplate.updateUser(user);
}
//执行完更改数据测试方法后的结果
//@Ignore的含义是它标注的方法不会被测试运行
@Ignore
public void testHello(){
System.out.println("Hello world");
}
}
总结:junit是一个很方便的测试类,今天就在使用学习junit的过程中找出了一些昨天没有发现的bug,现在也有些理解了为什么说测试如此重要,它可以保证我们经过测试后的每一个方法都可以放心的使用,后期降低纠错和调试的成本
2.学习log4j日志的使用
log4j主要有三个普通日志所没有的优点
1). 日志信息输出地点:控制台,文件,GUI组件,服务器,事件记录器,守护进程
2). 日志信息输出格式
3). 日志信息级别
而且所有这些,都可以通过配置文件非常简单的配置好,不用在程序中反复修改代码.
使用时,要先添加log4j的依赖,
其次是配置log4j.properties文件,要注意log4j和log4j2的区别,两者都不同的包,配置文件名也不同,如果搞混了,程序是无法运行的
log4j提供不同的输出地点和格式
首先是输出到控制台,配置文件如下
控制台输出结果
接着是输出到指定文件
结果是这样:
还可以在java类中指定配置文件的加载路径
二.明天计划的事情
1.练习debug单步调试
2.尝试购买服务器,并将部署数据库到远程DB,从本地直接连远程.
3.如果有时间,则继续尝试部署maven和mysql到服务器
三.遇到的问题
1. 使用springtest和JUNIt测试springJDBC中接口时遇到spirngtest和junit版本不匹配的问题
解决方法,查看错误日志,发现报错:
Caused by: java.lang.IllegalStateException: SpringJUnit4ClassRunner requires JUnit 4.12 or higher.
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner
意思是需要Junit4.12或更高的版本,于是将pom中的junit依赖更改为4.12后解决
2. 使用@ContextConfiguration时配置路径报错:找不到.xml配置文件
解决方法:上网搜索,因为junit默认路径是src/test下,所以要将配置文件路径更改为:
Classpath*:configureFile.xml
四,收获
基本已经写在上面了
五.根据要求回答提问
1. 怎么查找资料
首先肯定是使用百度,搜索在任务中看不懂的名词,先了解这个东西到底是什么,如果是一种框架或者技术的话,再继续搜索基本原理或者概述,资料选择上以百度文库和一些教程网站上的为主,还有一些个人博客写的也很好
2. 怎么定位问题
首先,在写代码过程中,先写一个最简单的demo,不要求有很多功能,但要求是没有问题的,然后再在这个正确的代码上逐渐扩展功能,这样出现问题时,首先就可以将问题缩小范围,知道是哪一部分增加的代码有问题,然后再区分时增加的代码本身的问题还是和以前写好的代码之间的联系出现问题.
3. 怎么解决问题
首先,看这个问题是基本概念不懂还是在具体实践中出现了bug,如果是基本概念不懂,先搜索基本资料补充基础知识,然后实践操作,如果是在实践中遇到bug,则先看错误提示,如果是没有错,但是运行结果不正确,则说明业务逻辑有问题,则可以使用单步调试.如果在实践中被一个bug卡了很久,那么再去找找相关基础知识,总之就是基础知识,实践,出现问题,再查基础知识,实践这样一个反复循环的过程.
4. 怎么重构代码
刚刚开始,基本还没有开始重构…
5. 怎么选择框架
正在努力学习各种框架,还没有到如何选择的程度…
6. 怎么测试
正在学习中…目前感觉是就单个方法测试来说,是要想出的所有的正常情况和异常情况,看结果是否和预期一致.
评论