本文目录导航:
作为 IT 从业人员,你觉得有什么工具大大提高了你的工作效率?
我也谈谈自己的一些提高开发体验经验,就说软件工具部分。
这里的经验基本上都是冲着一个原则去的:“凡是需要重复做的,必须使用自动化工具完成。
”
1. 版本控制一般自己的项目使用git,公司开发规定用svn。
反正不管怎么样,版本控制少不了。
有个说法,没有版本控制的项目,就等于没有。
版本控制的好处太多了,用过的人都知道。
等于历史版本 + 代码备份了。
这个提到的很多,就不多说了。
2.单元测试工具写程序需要验证,如果快速知道新的代码和过去的写的代码不冲突,这个时候单元测试就能起到作用了。
当然单元测试的功能不仅仅是这个:
这个是现代开发流程的基本模块之一,没有单元测试的项目,不是一个合格完整的项目。
有了单元测试,就再也不用担心在大项目中,自己做的小修改有会有什么大影响了。
开发压力大大减少PHP的我用的是PHPunit,JavaScript用过的就多了,Jasmine,Qunit,Mocha等工具(不管哪一个,至少要用到一个)C#一般用nUnit。
还有各种mock,faker辅助。
3.功能测试工具就是交互界面测试,也可以是界面样式测试。
代码写的方式大致过程和单元测试差不多,不过单元测试每个单元都是独立的,理论上不应该有任何依赖关系(只要有依赖关系就叫做集成测试);而功能测试,就是最后成品的测试,必须把所有依赖打开,并且在界面上进行测试。
界面功能测试的优点:
缺点:
功能测试,也是自动测试的一种,至少解放了大量重复性劳动,大大提升界面功能开发的速度。
功能测试工具主要有phantomjs和Selenium。
我两个都用,根据不同情况使用不同策略。
4. 依赖管理/程序包管理器
有了依赖管理,从此不用再手动去每个库的官方网站下载和更新库了。
配置一下,运行一下命令行,然后就下载好了,定时在运行一下命令行,所有库又更新到最新版本了。
开发体验大大提高。
列举一下主要好处:
依赖管理下载速度快,免除开发人员手动的重复劳动。大大提高开发效率
PHP的依赖管理是composer,js的依赖管理是npm和bower,C#的是nuget,
5. 流程管理/构建工具
这个叫法很多还有叫做任务自动管理工具的,不管是什么名字,都是一个意思:自动化流程管理。
简单的说从源代码到产品之间,中间还有一个复杂的过程,一般大致如下:
一般对开发人员来说,凡是重复的,必须使用工具自动完成。
开发人员是不愿意重复做这些流程,所以需要流程管理,把这些步骤全部用代码编排好,然后执行一个命令行,让电脑反复执行去。
没有流程管理的项目不是一个好项目
JavaScript有grunt和gulp,PHP有Phing,Java有ANT。
我用grunt比较多。
6. Live Reload
Live Reload一般是和流程管理一起使用的,(也有独立使用的版本)。
独立出来说也是为了体现程序员一个终极特质:懒。
凡是重复的,必须使用工具完成。
Live Reload就是这个体现:按F5是个重复的低效率行为,必须交给工具完成
Live Reload的功能说起来很简单:
给开发人员带来的直接好处就是查看页面变动,只要按ctrl+s保持代码就行了,连f5都不用按了。
就这好处,足以把Live Reload这个工具当作神器了。
配合流程管理工具,只要保存代码(ctrl+s),就马上进行构建,构建完成自动刷新页面。
我用的Live Reload是grunt-contrib-watch。
7.代码质量分析工具
人工检查代码的效率是比较低下的,所以质量分析这一块可以作为开发辅助工具,来提高开发质量
常见的代码质量工具有:
等等,让然还有其他的质量分析,这些都是可以整合到流程管理上的。
JavaScript和PHP的用的比较多,Jshint,Jscs,uglifyjs,phpcpd,phpcs,phpdcd,PHPLOC等等工具,可以帮助开发人员提高代码质量,控制团队代码风格。
8.持续集成
有人和我说过,持续集成可以让你开发水平提高达到到另外一个层级。
当我实践后,终于明白持续集成的魅力所在了。
要会持续集成,你首先必须学会以上6条(live reload除外),以上6条基本就是持续集成的几个基础模块,学会后,你自然而然就已经会了持续集成了。
持续集成的主要流程如下
当你设置好一个持续集成的项目后,以上的步骤应该就是全自动的了。
还是那句老话: 凡是重复的步骤,应该用工具来完成。
而持续集成就是这个终极工具。
持续集成其实就是流程管理的一个升级版本,或者说一个扩充。
它们都是自动流程工具。
它们的差别是:
我们可以设想一下这样的一个情况,在有20-50个人的团队在开发一个PHP项目,每个人每天至少往版本控制中push大约10次新代码,而这个项目你又要保证在3个主流的浏览器中功能一致,样式相同,而这个项目又必须跨平台,可以在mac,window,linux上都可以运行,而且还要保证PHP5.4~5.6都可以运行。
这个时候,持续集成系统的优势就会显示其真正的威力了。
总之,在一个专业项目中,持续集成服务所提供的自动构建和专业报告,可以把项目开发的专业水准再次提高到一个新的层次当中。
我用过的持续集成是Jenkins。
文章到此算完结了。
其实开发中,还有很多优秀的工具,但无法和这些主要的开发工具相比,就不在这里说了。
PHPUnit模拟对象的静态方法问题,怎么解决
当我们对A类进行单元测试时,A类可能依赖了B类,为了减少依赖,方便A类方法的测试,我们可以模拟一个B类,简单规定其各方法的返回值(而非真正实现具体逻辑)。
Phpunit中提供了一套模拟类的api,简单使用如下:[php] view plaincopyprint?class StubTest extends PHPUnit_Framework_TestCase { public function testStub() { // Create a stub for the SomeClass class. $stub = $this->getMock(SomeClass); // Configure the stub. $stub->expects($this->any()) ->method(doSomething) ->will($this->returnValue(foo)); // Calling $stub->doSomething() will now return // foo. $this->assertEquals(foo, $stub->doSomething()); } } class StubTest extends PHPUnit_Framework_TestCase{public function testStub(){// Create a stub for the SomeClass class.$stub = $this->getMock(SomeClass);// Configure the stub.$stub->expects($this->any())->method(doSomething)->will($this->returnValue(foo));// Calling $stub->doSomething() will now return// foo.$this->assertEquals(foo, $stub->doSomething());}}在这个例子中,我们得到了一个SomeClass的模拟,规定其可以被调用任意次,如果调用doSomething方法,将得到值foo。
问题:我们知道,对于一个单例类,其constructor方法为private,而getMock的实现,默认是要调用原类的constructor方法。
如果SomeClass为单例,phpunit将会提示Call to private SomeClass::__construct() from context PHPUnit_Framework_TestCase这时,我们的测试该如何进行呢?解决:仍然使用getMock进行模拟。
只要将其第5个参数设为false即可。
其含意是:不调用原对象的构造函数。
[php] view plaincopyprint?$stub = $this->getMock(SomeClass, array(), array(), , false); $stub = $this->getMock(SomeClass, array(), array(), , false);不得不说,这样使用有点复杂。
如果你使用的是phpunit3.5及以上版本提供了更易用的api,你可以这样禁掉对原有constructor方法的调用。
$stub=$this->getMockBuilder(SomeClass)->disableOriginalConstructor()->getMock();附:对getMock的6个可选参数的详解, 手册中并未提及它们的默认值,经测试得到结果如下:array(), array(), , false, false, false即$stub=$this->getMockBuilder(SomeClass)等同于:$stub=$this->getMockBuilder(SomeClass,array(), array(), , true, false, false)
mock y是什么意思?
mock y的含义及应用范围Mock Y指的是在软件开发中,通过模拟数据、行为或对象,来模拟测试环境和流程,以便进行单元测试和集成测试,从而提高软件质量和开发效率。
Mock Y可以用于模拟各种接口、服务、类对象等,常用于前端开发和后端开发中,可以通过各种编程语言和工具来实现。
Mock Y的优点在于,与真实环境进行测试相比,可以提高测试效率、降低测试成本、解除测试依赖。
通过模拟数据和行为,可以更快地发现和解决问题,增强代码的健壮性和可维护性。
Mock Y在开发过程中也可以起到文档的作用,开发人员可以通过文档了解接口或服务的使用方法和参数要求。
mock y的实现方法和注意事项实现Mock Y的方法可以采用第三方工具或手写代码,例如Mockito、EasyMock、PHPUnit等。
在实现Mock Y时需要注意接口或服务的正确性和完整性,测试数据的真实性和合理性,以及代码的可读性和可维护性。
因此,Mock Y的设计和实现需要结合具体的需求和场景,灵活应用,并不是一种适用于所有情况的通用方法。
评论(0)