• 【说明】理想是丰满的,现实很骨感,昨天还说今天有望干掉5个小任务,看来是没可能了,兜兜转转地做了一天也才完成下面的这些

一:今日完成

  • 19.学习Spring,配置Spring和Junit

1)先安装一下m2eclipse插件

创建了一个maven项目

导入现有项目

又发现昨天的本地配置似乎出了一些问题

配置优先级从高到低:pom.xml--->profiles.xml--->user settings --->global settings

打开maven仓库

貌似又碰到其它问题了,比如之前设置好的环境变量又找不到了,只能再改一下。

结果又碰到了eclipse配置问题

在stackoverflow有一个相关的答案,然后搞定了

2)好了,接下来开始spring和junit的学习之旅吧

先来说一下spring的基本概念

Spring是一个轻量级的IOC和AOP容器框架:

a,轻量级:程序实现不是很复杂,代码不是很多,占用资源不是很多,没有侵入性;

b,IOC(Inversion of Control 控制反转):对象创建责任的反转(重点,核心);

c, Aop(Aspect Oriented Programming):一种面向横切面编程的思想方式,可以进行功能性扩展,看前边的一篇转载的博客:面向横切面(AOP)编程

d,容器:可以容纳对象,并且可以控制对象的生命周期;

在eclipse里面用maven构建了一个ssh框架,构建中,,,,

构建完成后发现依赖包真的不用自己下载了!!!!

再加上配置文件,简直高大上啊

接下来看看junit的功能,我之前也只是知道它是单元测试,但是看了一篇文章之后发现,spring也有junit测试,怎么说呢,看下面的spring的框架组成

其实上面还应该有一个模块,单元测试框架

我们先来讨论下,在基于Spring的javaweb项目中使用Junit直接进行单元测试有什么不足

1)导致多次Spring容器初始化问题

根据JUnit测试方法的调用流程,每执行一个测试方法都会创建一个测试用例的实例并调用setUp()方法。由于一般情况下,我们在setUp()方法中初始化Spring容器,这意味着如果测试用例有多少个测试方法,Spring容器就会被重复初始化多次。虽然初始化Spring容器的速度并不会太慢,但由于可能会在Spring容器初始化时执行加载Hibernate映射文件等耗时的操作,如果每执行一个测试方法都必须重复初始化Spring容器,则对测试性能的影响是不容忽视的;

/////////使用Spring测试套件,Spring容器只会初始化一次!

2)需要使用硬编码方式手工获取Bean

在测试用例类中我们需要通过ctx.getBean()方法从Spirng容器中获取需要测试的目标Bean,并且还要进行强制类型转换的造型操作。这种乏味的操作迷漫在测试用例的代码中,让人觉得烦琐不堪;

////////使用Spring测试套件,测试用例类中的属性会被自动填充Spring容器的对应Bean
,无须在手工设置Bean!

3)数据库现场容易遭受破坏

测试方法对数据库的更改操作会持久化到数据库中。虽然是针对开发数据库进行操作,但如果数据操作的影响是持久的,可能会影响到后面的测试行为。举个例子,用户在测试方法中插入一条ID为1的User记录,第一次运行不会有问题,第二次运行时,就会因为主键冲突而导致测试用例失败。所以应该既能够完成功能逻辑检查,又能够在测试完成后恢复现场,不会留下“后遗症”;

////////使用Spring测试套件,Spring会在你验证后,自动回滚对数据库的操作,保证数据库的现场不被破坏,因此重复测试不会发生问题!

4)不方便对数据操作正确性进行检查

假如我们向登录日志表插入了一条成功登录日志,可是我们却没有对t_login_log表中是否确实添加了一条记录进行检查。一般情况下,我们可能是打开数据库,肉眼观察是否插入了相应的记录,但这严重违背了自动测试的原则。试想在测试包括成千上万个数据操作行为的程序时,如何用肉眼进行检查?

////////只要你继承Spring的测试套件的用例类,你就可以通过jdbcTemplate在同一事务中访问数据库,查询数据的变化,验证操作的正确性!

所以,我的目的很明显,结合着spring的测试套件来进行单元测试,在次之前,先来了解一下单元测试junit4

  • 20.编写单元测试的代码,注意,你也可以尝试一下,先写单元测试的代码,再写接口,再写实现类。

1)JUnit4是JUnit框架有史以来的最大改进,其主要目标便是利用Java5的Annotation特性简化测试用例的编写。

先简单解释一下什么是Annotation,这个单词一般是翻译成元数据。元数据是什么?元数据就是描述数据的数据。也就是说,这个东西在Java里面可以用来和public、static等关键字一样来修饰类名、方法名、变量名。修饰的作用描述这个数据是做什么用的,差不多和public描述这个数据是公有的一样。

那为什么要进行单元测试呢?

我们在编写大型程序的时候,需要写成千上万个方法或函数,这些函数的功能可能很强大,但我们在程序中只用到该函数的一小部分功能,并且经过调试可以确定,这一小部分功能是正确的。但是,我们同时应该确保每一个函数都完全正确,因为如果我们今后如果对程序进行扩展,用到了某个函数的其他功能,而这个功能有bug的话,那绝对是一件非常郁闷的事情。所以说,每编写完一个函数之后,都应该对这个函数的方方面面进行测试,这样的测试我们称之为单元测试。

传统的编程方式,进行单元测试是一件很麻烦的事情,你要重新写另外一个程序,在该程序中调用你需要测试的方法,并且仔细观察运行结果,看看是否有错。正因为如此麻烦,所以程序员们编写单元测试的热情不是很高。于是有一个牛人推出了单元测试包,大大简化了进行单元测试所要做的工作,这就是JUnit4。

2)为了更清楚的了解测试流程,我先做一个简单的加减乘除测试来验证一下流程:

这是创建的项目,导入junit类库,生成calculate类的测试类

run as junit test ,测试之后,发现,一个错误,一个略过,两个成功

3)看一下测试类:

package com.ljl.junit4Test;

import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test;

import static org.junit.Assert.*;

import org.junit.Before;

import org.junit.Ignore;

import org.junit.Test;

public class CalculatorTest {

private static Calculator calculator = new Calculator();

@Before

public void setUp() throws Exception {

calculator.clear();

}

@Test

public void testAdd() {

calculator.add(2);

calculator.add(3);

assertEquals(5, calculator.getResult());

}

@Test

public void testSubstract() {

calculator.add(10);

calculator.substract(2);

assertEquals(8, calculator.getResult());

}

@Ignore("Multiply() Not yet implemented")

@Test

public void testMultiply() {

}

@Test

public void testDivide() {

calculator.add(8);

calculator.divide(2);

assertEquals(4, calculator.getResult());

}

}

4)重点剖析一下(提到下面的知识点要能想到对应的例子):

一、包含必要地Package

二、测试类的声明

三、创建一个待测试的对象。

四、测试方法的声明

五、编写一个简单的测试方法。

六、忽略测试某些尚未完成的方法。

七、Fixture(暂且翻译为“固定代码段”)

5)再来说点高级点的测试话题

一、高级Fixture

二、限时测试。

三、 测试异常

四、Runner (运行器)

五、 参数化测试。

六、 打包测试。

  • 21.查看日志,并转成Debug模式,练习调试,学会查看单步执行时的变量值。

在控制台显示所有日志

开启项目debug模式

记一些常用的快捷键

查看变量变化

真是够了,debug模式竟然出不来!看了好多说法,都是java模式,找了半天没找到,原来在这里!!!

分别是show perspective;javaEE,java,debug;

最后再补上今天在一个博客上看到的硬货!

:明天计划

部署服务器可是很感兴趣的,因为还想把我的毕业设计给放到自己的服务器上,明天走一下流程。

三:疑难问题

今天的最后一个debug貌似里面水很深,不能只是浅尝则止,以后肯定用得到!

四:思考总结

今天的maven配置过依赖文件之后的下载可是把我给吓住了,,这么容易??哎呀,忘了,版本没改!!下了一堆以前的jar包,以后下手要慎重啊

task19-21的更多相关文章

  1. 【夯实Mysql基础】MySQL性能优化的21个最佳实践 和 mysql使用索引

    本文地址 分享提纲: 1.为查询缓存优化你的查询 2. EXPLAIN 你的 SELECT 查询 3. 当只要一行数据时使用 LIMIT 1 4. 为搜索字段建索引 5. 在Join表的时候使用相当类 ...

  2. 2-1 Linux 操作系统及常用命令

    根据马哥linux初级视频 2-1.2-2来编辑 1. GUI与CLI GUI: Graphic User Interface CLI: Command Line Interface 注:在Windo ...

  3. Fedora 21 安装 Nvidia 驱动以及失败后的补救方法

    在 Linux 桌面系统下玩了这么久,大部分时间都是使用 Ubuntu,偶尔使用一下 Fedora.我的电脑中安装有多个 Linux 发行版,见这里<在同一个硬盘上安装多个Linux发行版及Fe ...

  4. 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验

    在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...

  5. CSharpGL(21)用鼠标拾取、拖拽VBO图元内的点、线或本身

    CSharpGL(21)用鼠标拾取.拖拽VBO图元内的点.线或本身 效果图 以最常见的三角形网格(用GL_TRIANGLES方式进行渲染)为例. 在拾取模式为GeometryType.Point时,你 ...

  6. ABP(现代ASP.NET样板开发框架)系列之21、ABP展现层——Javascript函数库

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之21.ABP展现层——Javascript函数库 ABP是“ASP.NET Boilerplate Project ...

  7. C#开发微信门户及应用(21)-微信企业号的消息和事件的接收处理及解密

    在上篇随笔<C#开发微信门户及应用(19)-微信企业号的消息发送(文本.图片.文件.语音.视频.图文消息等)>介绍了有关企业号的消息发送,官方特别声明消息是不用加密发送的.但是在回调的服务 ...

  8. 【转】MySQL性能优化的最佳21条经验

    文章转自: http://blog.csdn.net/waferleo/article/details/7179009 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关 ...

  9. HTTP 错误 500.21 - Internal Server Error 解决方案

    不久前重新安装了Windows7,在安装了VS2010 开发平台之后,将网站发布到IIS,访问发生如下错误: HTTP 错误 500.21 - Internal Server Error处理程序“Ni ...

  10. swift与OC之间不得不知道的21点

    swift与OC之间不得不知道的21点   自6月的WWDC大会上由苹果的大神Chris Lattner向我们首次展示swift至今已经大半年时间了,虽然绝大部分软件公司代码里还都见不到一丁点swif ...

随机推荐

  1. HUD2795 线段树(单点更新)

    题目中给出的h和w范围均大,其实n的最大范围才200000,所以我们建立的线段树大小为min(h,n),线段树的每一个节点包含一个变量c,记录当前区间内还剩下的可以put on的最大长度.插入一个数时 ...

  2. python定时执行方法

    1  time.sleep import time for i in range(5): print(i) time.sleep(10) 2 用shed import time import sche ...

  3. mysql开发之---使用游标双层嵌套对总表进行拆分为帖子表和回复表

    注意点: (1)进行拆分的总表表名是不同的.所以创建暂时表,把总表的数据先插入暂时表 (2)为了避免最外层游标轮询数据结束时,抛出 not found 退出程序,不会运行关闭游标等兴许操作,定义con ...

  4. cpu、内存、硬盘

    grep -c 'model name' /proc/cpuinfo

  5. lodash 数组裁剪 drop

    _.drop(array, [n=1]) 裁剪数组中的前 N 个数组,返回剩余的部分. <!DOCTYPE html> <html lang="zh"> & ...

  6. Nginx 简单的负载均衡配置演示样例

    近期在做开放查询应用的时候,因为数据两天特别多,两千多万条呢,用户訪问需求也比較大,所以就用nginx做了 负载均衡,以下是改动之后的相关内容. http://www.cnblogs.com/xiao ...

  7. 把质量控制工作往前推进(1)——安装sonarqube

    曾经关注点一直在怎么提高应用程序的质量,没太在意代码级别的质量.近期由于某些因素的推动,须要关注到代码级别的质量去,把质量工作尽量往前推,也符合质量控制的原则.  试用了一下sonarqube(老版本 ...

  8. discuz密码生成

    Discuz的密码加密算法其实就是两次MD5加密,首先用明文进行一次加密,之后随机生成一个salt,再把第一次的密文后面添加salt作为明文再进行一次MD5加密.salt保存在uc_members表里 ...

  9. H265 Rtp封包

    H265 Rtp封包可以参考Ffmpeg,具体实现在文件rtpenc_h264_hevc.c(4.0.1版本),核心的方法是nal_send 这个方法有些绕,下面帖子具体的代码及注释. static ...

  10. php里面用魔术方法和匿名函数闭包函数动态的给类里面添加方法

    1.认识  __set  (在给不可访问属性赋值时,__set() 会被调用) 也就是说你再访问一个类里面没有的属性,会出发这个方法 class A{ private $aa = '11'; publ ...