代码重构与单元测试——对方法的参数进行重构(五)
五、重构2:对GetFrequentRenterPoints方法的参数进行重构
重构最重要的思想就是普通程序也能写出优秀的程序。重构一个项目的巨大工作量就是修改变量名、提取方法、抽取接口、修改方法参数等简单的工作。作为一个普通的程序就可以通过这些简单且容易完成的工作目标来提升自己的编码能力,加深自己对项目的认知,从而为最高层次的重构打下基础。在这个过程中发现Bug、修改Bug,这不是重构。优化不是重构。强化异常捕捉、增加预防性代码不是重构。让代码更容易测试不是重构——尽管重构能达到相同的效果。这些所有的事都是有益的。但这些都不是重构。
我们观察 代码重构与单元测试(一)文章中的共享充电宝计费代码中,发现Customer类的GetFrequentRenterPoints()方法也需要进行重构,GetFrequentRenterPoints方法有三个参数,这三个参数不是所有参数都是必须的,本文使用重构中的“删除参数”,对这个方法的参数进行重构。
1.在Visual Studio 2019代码编辑器中打开Customer.cs文件,找到GetFrequentRenterPoints方法并选中,让其突出显示。如下图。
2. 接下来,执行以下操作之一:
在Visual Studio 2019的菜单栏上选择“编辑 > 重构 > 删除参数” 。
在Visual Studio 2019的菜单栏上选择“编辑 > 重构 > 重新排列参数” 。
3. 在弹出的“更改签名”对话框中,可以使用右侧的按钮更改方法的参数数量与位置。然后点击“确定”按钮。如下图。
4.在进行了方法参数重构之后,GetFrequentRenterPoints方法代码如下:
public int GetFrequentRenterPoints(Rental item, decimal amount)
{
int frequentRenterPoints = 0;
//计算积分
if (item.Power.PriceCode == PowerBank.HighTraffic && item.RentedTime > 4)
{
frequentRenterPoints += (int)Math.Ceiling(amount * 1.5M);
}
else
frequentRenterPoints += (int)Math.Ceiling(amount);
return frequentRenterPoints;
}
5. 在Visual Studio 2019中打开测试项目LeasePowerBankTest中的UnitTest1.cs测试类文件,修改测试类中的测试方法ValidGetFrequentRenterPointsTest,代码如下:
[TestMethod]
public void ValidGetFrequentRenterPointsTest()
{
int expected = 5;
//创建用户
var customer = new Customer("张三");
//创建充电宝
PowerBank regularPowerBank = new PowerBank("低-充电宝", PowerBank.LowTraffic);
//创建租赁数据
var rental1 = new Rental(regularPowerBank, 5);
// Act
int actual = customer.GetFrequentRenterPoints(rental1,5);
// Assert
Assert.AreEqual(expected, actual, 0.001, "积分计算错误");
}
6. 在Visual Studio 2019的菜单栏上找到“测试-->运行所有测试”菜单项。或者在“测试资源管理器中”选择 “在视图中运行所有测试”按钮, 以运行测试。测试全部通过。如下图。
7.在经过上面的重构之后,GetFrequentRenterPoints方法的参数减少到了两个。现在再仔细品品这个方法的参数,发现方法中的amount参数也不是必须的,也是可以减少的。继续进行重构。
8.在Visual Studio 2019代码编辑器中打开Customer.cs文件,选中GetFrequentRenterPoints方法,让其突出显示,然后单击鼠标右键,在弹出的快捷菜单中选择“快速操作和重构”,会显示如图中方框中的菜单,选择“更改签名”。如下图。
9. 在弹出的“更改签名”对话框中,可以使用右侧的按钮更改方法中的参数数量与位置。然后点击“确定”按钮。如下图。
10.经过上面的重构步骤之后,GetFrequentRenterPoints方法的代码如下:
public int GetFrequentRenterPoints(Rental item)
{
int frequentRenterPoints = 0;
decimal amount = GetAmount(item);
//计算积分
if (item.Power.PriceCode == PowerBank.HighTraffic && item.RentedTime > 4)
{
frequentRenterPoints += (int)Math.Ceiling(amount * 1.5M);
}
else
frequentRenterPoints += (int)Math.Ceiling(amount);
return frequentRenterPoints;
}
11.在Visual Studio 2019中打开测试项目LeasePowerBankTest中的UnitTest1.cs测试类文件,修改测试类中的测试方法ValidGetFrequentRenterPointsTest,代码如下:
[TestMethod]
public void ValidGetFrequentRenterPointsTest()
{
int expected = 5;
//创建用户
var customer = new Customer("张三");
//创建充电宝
PowerBank regularPowerBank = new PowerBank("低-充电宝", PowerBank.LowTraffic);
//创建租赁数据
var rental1 = new Rental(regularPowerBank, 5);
// Act
int actual = customer.GetFrequentRenterPoints(rental1);
// Assert
Assert.AreEqual(expected, actual, 0.001, "积分计算错误");
}
12. 在Visual Studio 2019的菜单栏上找到“测试-->运行所有测试”菜单项。或者在“测试资源管理器中”选择 “在视图中运行所有测试”按钮, 以运行测试。测试全部通过。如下图。
相关文章
- 使用chatGPT写一篇关于在线客服系统的博客-在线客服系统:快速解决客户问题的利器
- 在wordpress开发的网站中添加在线客服咨询功能代码教程
- 中英双语多语言外贸企业网站源码系统 - HanCMS - 安装部署教程
- 浏览器扩展开发系列教程(一)
- Chrome 将 Notification.requestPermission() 的“default”结果视为“dennied”
- 在线客服系统源码开发实战总结:渐变色效果的实际运用效果
- 在线客服系统源码开发实战总结:官网首页视频大背景循环播放效果实现
- 在线客服系统源码开发实战总结:需求分析及前端代码基本技术方案
- 在线客服系统源码(外贸多语言带翻译网页在线客服系统源码完整搭建)
- 前端vue2下使用media query 媒体查询报错问题
- vue2搭配vue-router3真正可用不报错的写法格式
- wordpress跨境电商外贸独立站安装WooCommerce插件
- wordpress独立网站域名解析教程
- obs直播录屏软件下载使用教程-制作短视频录制视频教程
- wordpress独立站菜单导航设置教程
- wordpress外贸跨境电商独立站WooCommerce插件安装教程
- wordpress编辑器增加粘贴图片上传服务器教程
- wordpress网站主题安装教程
- 多语言在线客服系统源码-自动识别中英环境-私有化部署完美支持跨境电商网站
- wordpress企业网站搭建教程