日期: 2022-09-20 15:26:00 浏览数:2

上往建站提供服务器空间服务商,百度快照排名,网站托管,百度推广运营,致力于设计外包服务与源代码定制开发,360推广,搜狗推广,增加网站的能见度及访问量提升网络营销的效果,主营:网站公司,百度推广公司电话,官网搭建服务,网站服务企业排名,服务器空间,英文域名等业务,专业团队服务,效果好。
靖江小程序制作【靖江企业邮箱】靖江网站外包、靖江微信商城开发、靖江网店美工、靖江淘宝设计
靖江市,简称靖,江苏省辖县级市,由泰州市代管,位于泰州市东南部,介于北纬31°56′-32°08′,东经120°01′-120°33′之间,属亚热带季风气候,是江苏省新兴的港口工业城市,总面积665平方公里。截至2019年,靖江市常住人口达68.46万人。 [1-3]
明成化七年(1471年),始置靖江县,属常州府。1996年7月19日,地级泰州市设立,靖江市改由泰州市代管。 [4] 截至2019年,靖江市辖1个街道、8个镇;另辖5个乡级单位。 [5]
2019年,靖江市实现地区生产总值979.57亿元,同比增长7.2%。按常住人口计算全年人均GDP为143066元。分产业看,第一产业实现增加值25.70亿元,增长2.1%;第二产业实现增加值540.91亿元,增长6.5%;第三产业实现增加值412.96亿元,增长8.5%,第三产业增加值占GDP比重比上年提高1.4个百分点。 [1] 2020年12月,社科院发布《全国县域经济综合竞争力100强》,靖江排名第30 [6] 。
曾经有同事跟我说过,没有单元测试的开源框架无人敢用。对此,我颇为认同。
框架的可测试性,体现在两方面 。一方面是框架本身的单元测试,要建立完善、自化动、具备自我验收能力的测试体系。这样可以在框架迭代、Bug修复以及维护过程中提供测试支持,便于尽早发现自身存在的不足和问题。这在分布式开发中是非常有帮助的,它可以为不同地方的开发人员提供快速验证的能力和快速反馈的机制。一旦某处框架的改动,不能符合预期的效果,或者对既有的功能造成了影响,就可以通过专业的方式进行播报。编写单元测试还有一个隐藏好处是,可以帮助新手快速熟悉框架的使用。因为每一个测试用例都是一个很好的使用示例。
另一方面。框架还应考虑到如何为应用层提供可测试性的能力。也就是说,自己要能测试,还要让别人可测试。可不能光顾自己,而不管他人。
那如何让框架具备可测试性?或者,采用逆向思维,哪些行为会导致框架不具备可测试性,也许很容易让人理解。以下这些做法应该避免。
有不少经验不足的框架,为贪图方便,会直接使用die()/exit()终止程序。例如,最为常见的,当数据库连接失败时,直接die掉。
<?php$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');if (!$link) {
die('Could not connect: ' . mysql_error());}复制代码上面示例引自PHP官方文档的PHP: mysql_connect - Manual。
很多人一看到这样的示例,就误以为,不管在何种情况下,只要数据库连接失败了就终止。这种误解是严重有问题的。一来,应用层也许根本不需要用到数据库;二来,当系统出现故障时,也许应用层需要进行更友好的用户提示,而不是输出一句让非技术人员摸不着头脑的提示信息。
还有一种情况就是,当框架认为程序执行完毕后就执行die()/exit()操作,以“保证”后续不会再执行其他操作。例如,在某些接口框架里,当输出结果后,会执行exit()操作。
<?php$result = array(); // 待输出返回的结果echo json_encode($result);die();复制代码
这样的话,会导致在PHPUnit进行单元测试时,无法继续下去,也就无法测试了。
在编写C代码时,为了可移植性,会使用包装器模式对系统级的操作进行再封装。在编写PHP代码时,为了可测试性,也可以对PHP原生函数进行封闭,以便提供测试时的缝纫点。以header()函数为例,直接在代码片段中使用header()输出头部的话,会导致在命令行CLI模式执行单元测试时报错,因为如果输出内部后再进行header()的话,PHP会提示“Cannot modify header information - headers already sent by……”。
在开启严格的错误级别时,这样的错误提示会让PHPUnit终止后续的代码执行,从而影响测试。更好的方法是,通过提取子函数、或者建立一个简单的包装器,对这些底层的操作进行封装。
有时,在测试时,需要使用到桩件、替身、仿件对象等。但如果使用的是表态类方法,则不能通过模拟的对象来替换已有的实现,这会导致难以测试,同时也会不可避免地产生不必要的副作用。例如,当发送邮件的实现代码片段是:
<?phpMailer::send($title, $adreess, $content);复制代码
在测试时,不能Mock的话,就会真的发一封邮件给用户,也不好模拟发送失败这样的异常场景。
类函数的访问级别可分为:public公开、protected保护和private私有这三种级别。但这么多年,我发现在PHP开发过程中,几乎尚未找到非使用private级别不可的场景。相反,为了可测试性,可将private提升到protected级别。而且,PHP所提供的访问级别,似乎也不近完美。当一个子类重载父类的private方法时,并没有语法上的错误,虽然重载的方法最终也是无效的。
<?phpclass Person {
public function haveFun() {
$this->doSth();
}
private function doSth() {
echo '听听歌';
}} class Student extends Person {
protected function doSth() {
echo '看看书';
}} $person = new Student();$person->haveFun();
靖江小程序制作【靖江企业邮箱】靖江网站外包、靖江微信商城开发、靖江网店美工、靖江淘宝设计
上往建站提供搭建网站,域名注册,官网备案服务,网店详情页设计,企业网店,专业网络店铺管理运营全托管公司咨询电话,服务器空间,微信公众号托管,网页美工排版,致力于域名申请,竞价托管,软文推广,全网营销,提供标准级专业技术保障,了却后顾之忧,主营:虚拟主机,网站推广,百度竞价托管,网站建设,上网建站推广服务,网络公司有哪些等业务,专业团队服务,效果好。
服务热线:400-111-6878 手机微信同号:18118153152(各城市商务人员可上门服务)