分类 我的翻译 中的文章

[译]使用Mockito简单mock入门

我们在写单元测试的时候,面临的一个挑战就是要测试的内容总是依赖于其他组件,要是我们还得先配置好其他组件,未免有点不如意,那么我们可以使用Mocks来代替那些依赖的组件 本文问了展示这个过程,我会创建一个DAL,数据访问层,这是一个类,提供了一个通用的api来访问和修改数据仓库的数据,然后,我们要测试这个api,而不用配置连接某个本地的数据库,,或者一个远程的数据库,或者是一个文件系统,反正就是任何放数据的东西,DAL层的好处就是隔离开了数据访问和应用程序代码 首先使用maven来创建一个工程 执行之后,本地生成MockitoDemo 文件夹,然后整个工程的目录结构与生成好了。 然后,我们写这样一个model类,表示book类型 然后,我们访问Book model的DAL类会如下 DAL层现在还没啥功能,我们要通过TDD来测试,实际中,DAL可能和ORM来交互,也可能和数据库API交互,但是我们设计DAL的时候,不用关心 准备测试 我倾向于用junit做单元测试,而Mockito做mock。首先更新一下pom文件。添加依赖 下面,我们要测试啦,我们会在单元测试中把mock数据注入到BookDAL中,这样我们就不要依赖任何数据源就可以完成测试 我们当然对应测试DAL类的每个方法嘛。 然后我们会在setup(这个方法是在测试类执行测试前执行的,用于准备数据啦) 在setup()方法中 1.首先我创建BookDAL的对象 2.然后stub,存根。。用mock的数据。这样当对应的方法被调用的时候就返回我mock的数据 然后,我们执行一下 mvn test就可以看到结果了    很简单。。。没有配置任何实际的数据源。……

阅读全文

前路月光

火影片头曲想知道中文,没找到翻译,于是译之,感谢@sepith  。 今夜月光 不知为何 比往日温柔 崎岖泥泞的来时路 何时才能有同行之人 我沉默 为即将而来的眼泪 泪水中努力 悲伤着变得更强 很多时候,伤痕累累 忘掉了痛苦 流过血泪 王者归来是使命所及 哪管一路秋叶萧萧 我仰望星空 孤独从来不是虚假的幻想 你的过去我无法参与 我想要的的是现在和未来 昨日月光 无论是明亮,还是黯淡 我用双手铸造 始于生而终于死 一定错过了 诸多美好 我的同伴 虽然时过境迁 可是,你住过的地方 经年难忘 如果你想对我说 我还是会在你身边 舍命相陪 很多时候,伤痕累累 星空暗淡 假使黎明 也悄然消失 我一定再一次 为了梦想努力拼搏 痛到难以承受 迷惘前路崎岖 我轻轻闭上双眼 感受月光温柔 前路相伴 岂敢轻易迷失 如果欺骗了内心 失去了自己 莫忘星空璀璨 凝视遥远的未来 固执地努力 很多时候,伤痕累累 忘掉了痛苦 流过血泪, 王者归来是使命所及 哪管一路秋叶萧萧 我仰望星空 真正强大的是 心怀梦想的人 有着爱的人……

阅读全文

Spring依赖注入

在Spring框架中,依赖注入设计模式主要用来定义对象之间的依赖,存在两种主要类型 1)setter注入(设置器) 2)constructor注入(构造器) 1.Setter注入 是最流行最简单的DI方法,通过一个setter方法来完成依赖。 例子: 一个有一个setter方法的Helper类 再写一个bean配合iwenjianshengming这些bean,并且通过property(属性)标签来设置依赖 看到了把。我们只需要一个setter方法把CsvOutputGenerator注入进去就行了 2.Constructor注入 这种方式是通过一个构造函数来完成依赖设置的 例子: 一个有着一个构造函数的Helper类 然后当然是一个bean配置文件了。通过constructor-arg标签来写依赖 该选哪个? 没有硬性规定,哪个合适就用那个,由于setter的简单性,一般还是setter用得多。……

阅读全文

Spring松耦合示例

面向对象设计的理念是把整个系统分成一组可重用的组件,然而,当系统变得越大的时候,尤其是在java中,这最大的对象依赖将会紧紧耦合,以至于非常难以管理和修改,而现在,你可以使用Spring框架扮演一个中间模块的角色,方便高效地管理其他组件依赖 输出生成的例子 看个例子,假设你的项目有一个方法可以输出内容到csv或者json格式,你可能写出这样的代码 ,然后是实现接口的类 再写个Json生成的类 有好几种方法来调用IOutputGenerator接口,以及我们如何使用Spring来避免对象的过度耦合。 方法1-直接调用 问题: 这种方法,output这个对象和CsvOutputGenerator耦合在了一起,每次要改变输出格式的话都要修改代码,如果这类代码遍布项目,那么改起来就跪了 方法2-通过帮助类调用 也许你会想创建一个Helper类吧所有的output实现都移进去 然后可以这样调用 问题: 看起来似乎更加优雅了,你仅仅需要管理这个Helper类就可以实现不同格式的输出需求改变了,然而,Helper还是和CvsOutputGenerator耦合,每一次要改变输出格式的时候,都要对Helper类做一下微调。 方法3-Spring Spring依赖注入很合适,可以使不同的格式生成类分离开来 首先对OutputHelper做一点微调,添加了一个参数 然后创建一个Spring bean配置文件,并声明所有的Java对象依赖 然后通过Spring调用 以后要改Json格式,直接改一下xml配置文件就行了。能够减少错误 结论 通过Spring框架的依赖注入,可以优雅的管理对象依赖,更大的灵活性,尤其是对于Java项目非常好用。……

阅读全文

Spring3实例入门-Hello World

每次看到hello world,都有一种说不出的赶脚,想起了一个程序员,退休后写毛笔字,取笔研磨铺纸,大笔一挥,写下了“hello world”。 1.使用Maven生成项目结构 2.转换成Eclipse项目 3.添加Spring3.0 依赖 在pom.xml文件里添加Spring 3.0 依赖,然后依赖会从Maven中央仓库自动下载 4.Spring bean 写个简单的bean 5.Spring bean配置文件 创建一个配置文件,在里面声明所有可用的Spring beans 6.最终的目录结构  7.运行 8.输出 9.Demo下载 Spring3-hello-world-example.zip……

阅读全文

使用Maven创建Web项目

本文通过Maven完成一个简单的Web项目(注意,Spring配置不是重点,看看就行) 1.从Maven模板创建Web应用程序 命令格式如下: 这就告诉Maven从**maven-archetype-webapp **这个模板来创建 友情提示:是不是太难记了..好吧,直接输入 根据向导来创建把。。 比如我这样写: 就创建了一个包名为com.mkyong,类名为CounterWebApp的项目了 2.Maven的Web程序目录结构 标准的web.xml部署描述文件生成了 对结构有疑问的去这里 生成的pom.xml文件如下 没啥疑问的。web.xml文件则如下: index.jsp内容是: 3.转换以支持Eclipse 为了使Maven的web项目支持Eclipse,在命令行下,cd到CounterWebApp目录下,然后输入这个命令 -Dwtpversion=2.0参数是必需的,这个参数指明了是web项目,然后导入到eclipse里就行了。从导入的工程ico可以看出是个web项目 图一 不要迷惑,如果我们只输入 会转换成java项目,而不是web项目的。 好了,现在项目已经准备好部署了,eclipse里的tomcat server插件装好,然后启动项目 图二 可以通过_http://localhost:8080/CounterWebApp/_地址来访问 4.更新pom文件 为了使Maven项目支持Spring MVC框架,我们需要修改pom.xml文件 1.添加编译插件指定jdk6来编译 2.添加Spring框架依赖 3.升级JUnit到4.1.1 5.Spring MVC 松耦合 创建Spring MVC控制器类,有两个方法,打印信息 然后,创建Spring配置文件,定义视图解析器 然后更新一下web.xml文件,通过Spring的监听器ContextLoaderListener把Spring框架集成进去 然移动index.jsp到WEB-INF目录里,以防用户直接访问他,同时我们编辑,增加${message}变量,也就是controller控制器传过来的值到页面 最终的页面结构是: 图三 6.Eclipse+Tomcat 为了通过Eclipse的Tomcat插件开始/调试项目,需要再执行一次下面的命令,使得所有的依赖附加完成 在没执行以前,项目依赖是空的 图四 执行完以后,就都有了 图五 重要!许多人就是没有第二次执行这个命令导致无法开始/调试,如果有问题,右击你的项目属性,看看依赖是否为空 7.Maven打包 web项目打包成war。放在target目录 进入项目目录,执行一下就可以了 然后把target目录的CountWebApp.war文件拷贝,并部署到你的web容器里就行了 8.Demo演示 打开_http://localhost:8080/CounterWebApp/welcome_ 可以看到 图六 我们传个参数进去 http://localhost:8080/CounterWebApp/welcome/mkyong 就可以看到效果了 图七 9.Demo下载 CounterWebApp.zip……

阅读全文

Maven库依赖机制及添加自定义库

一.Maven库依赖机制 Maven的库依赖机制可以帮助我们自动下载依赖的库文件,并且还能更新版本。。 考虑一个情境来理解机制的工作原理,假设我们要使用Log4J库作为项目的日志记录。以下是我们要做的 1.传统的方式 1)访问Log4J网站http://logging.apache.org/log4j/2.x/ 2)下载Log4J的jar包 3)复制进项目的classpath里 4)手工包含到项目的依赖里 看到没,你要从头做到尾,如果Log4J更新了,你得再来一遍。。 2.Maven的方式 1)需要知道Log4J的Maven坐标(coordinates,这个暂时没想到好名字),就是这样的东西 然后Maven就会自动下载1.2.14版本的Log4J了。如果version这个元素没有,那么如果有了新版本,Maven会自动下载新版本的。 2)在pom.xml里声明这个Maven坐标 3)当Maven编译或者build的时候,Log4J会自动下载,放入本地仓库里 4)Maven全部接管 3.解释 搜索顺序前面说过了。本地-》中央-》远程仓库 Maven坐标咋来的,当然去中央仓库搜索之了,搜索结果清晰的令人发指 二.添加自定义库到本地仓库 有两个情况,需要我们包含自定义的库到本地仓库里 1是你想使用的jar文件不再中央仓库 2是你创建了一个自定义的jar包,需要另一个项目使用这个jar 比如,kaptche,一个第三方的java库,生成验证码,现在中央仓库没有了。 我们想要加到本地仓库里 1.mvn安装 下载kaptche,解压并且拷贝kaptcha-version.jar到其他任何你喜欢的地方,比如c盘,然后输入如下格式的命令 这里我这样输入 这样完成了。kaptcha已经存在本地库了 2.pom.xml配置一下 这个前面说过了,Maven坐标嘛……

阅读全文

Maven仓库详解

本文由我翻译合并了多篇文章,整理成一篇。 一.本地仓库(Local Repository) 本地仓库就是一个本机的目录,这个目录被用来存储我们项目的所有依赖(插件的jar包还有一些其他的文件),简单的说,当你build一个Maven项目的时候,所有的依赖文件都会放在本地仓库里,仓库供所有项目都可以使用 默认情况下,本地仓库在.m2目录,windows下的话就是你的用户名目录下的.m2目录 1.更新本地仓库目录 找到你的MAVEN_HOME目录下的conf/setting.xml文件,更新localRepository节点 2.保存一下 完成了。新的本地仓库被放在了D:/maven/repo 看一下这个目录 二.中央仓库(central repository) 当我们build一个Maven项目的时候,Maven会检查我们的pom.xml文件,来定义项目的依赖,然后Maven会在本地仓库里查找,如果没有找到,就去maven的中央库去下载,地址是 http://search.maven.org/#browse 看起来是这样的  注意啊,虽然这个是新的中央仓库,但有时候还是会从_“**http://repo1.maven.org/maven/**_这个旧仓库下载东西,不过不要紧,理解就行了 三.远程仓库(Remote Respository) 在Maven中,当你在pom.xml中生命的依赖既不在本地库,也不在中央库的时候,就会报错。 1.例子 org.jvnet.localizer这个包仅在java.net的仓库里有(以前是,现在中央仓库也有了。但理解就行) ……

阅读全文

Maven安装教程

Maven不需要作为服务组件安装到windows上,仅仅需要下载,解压,然后配置一下环境变量就行了 1.JDK和JAVA_HOME 确保JDK已经安装,同时JAVA_HOME变量已经添加到了windows环境变量里,指向jdk目录  2.下载Maven 去Maven主页,选个版本,点击下载 3.解压 解压下载的zip文件,重命名,比如我放到D盘的Maven目录 4.添加MAVEN_HOME环境变量 添加一个新的环境变量MAVEN_HOME到环境变量,指向Maven目录  5.添加path变量 更新Path变量,把Maven的bin目录添加进去,这样就可以在任何地方执行mvn命令了  6.验证 打开命令行,输入 如果看到类似下面的 Maven已经成功的安装配置了。 老外写的太详细了。。。  ……

阅读全文

Maven实例入门-随机数生成

看了很多个例子,发现这个最好,译文中会带有我的一些了理解,有问题欢迎指出。 0.Maven是什么? Apache Maven,是一个软件(特别是Java软件)项目管理及自动构建工具,由Apache软件基金会所提供。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。 可以看到,核心就是项目管理和自动构建了,从例子中将会体会更深。本例创建一个随机数生成程序。 1.从Maven模板创建项目 Maven的环境变量配置和java类似,直接添加系统变量MAVEN_HOME指向你下载的maven目录,然后将bin目录添加到path环境变量里。 在命令行下,进入到你想存储项目的位置,比如,我自己有个叫work的目录,那么我就cd到work目录,然后按下面的格式输入命令 这是告诉Maven从**maven-archetype-quickstart **创建一个java项目,如果你这个参数不填,那么会列出一个列表,让你选择你想创建什么类型,比如web项目啊,啥的。 友情提示:是不是太难记了..好吧,直接输入 根据向导来创建把。。 比如 这里的groupId就是包名,artifactId就是类名,以后具体的一些其他参数我希望有时间可以跟大家分享。 2.Maven目录结构 上面的命令第一次执行的时候会从apache网站下载maven的一些其他东西,所以务必保持联网。执行成功后,会生成一个这样的目录结构 这里main目录是我们的程序住代码目录。源代码会放在/src/main/java/包名 目录里,而单元测试代码会放在/src/test/java/包名 目录里。当然还有一个标准的pom.xml文件会生成。这个pom文件其实类似于Ant的build.xml文件,它包含了项目的信息,从目录结构到项目插件到项目依赖,都有了。。 3.用Eclipse写代码 maven已经生成了一个完整的工程了,为了能够导入到eclipse里来编辑代码,我们可以把这个项目转换成eclipse可用的。 首先命令行进入NumberGenerator目录,然后输入 然后就会生成Eclipse需要的所有项目文件里 图1.导入eclipse之后的效果 4.更新pom文件 默认的pom文件太简单了。通常我们需要添加编译插件来告诉Maven我们打算使用哪个版本的jdk来编译项目,有时候默认的版本太低了 我们把source和target改成了1.6. 然后更新JUnit到4.1.1 最终我们的pom文件如下 5.更新业务逻辑 TDD开发的理念告诉我们先写测试,我们打开AppTest.java文件。 然后修改App.java的代码 6.Maven打包 现在,我们要使用Maven来编译我们的项目,并且打包成一个jar文件,记得pom.xml文件吗?在这个文件里我们定义了打包的类型 在项目目录(也就是NumberGenerator目录)的命令行下,输入 然后就会看到: 程序开始编译,并且执行了单元测试,然后在target目录下生成了jar包,最后,程序目录结构如下: 7.执行Demo 运行生成的jar文件,还在在NumberGenerator目录下,输入如下命令 后面的com.mkyong.App就是包名+类名,也就是类的全名了 8.Demo下载 Maven-NumberGenerator.zip  基本上一个完整的的示例就做完了,希望你有所收获,后续会更新一些Maven的的东西。欢迎支持。中秋快乐。   ……

阅读全文