
发表日期: 2021-04-25 10:55:34 浏览次数:112
泰州网站推广【泰州办理400电话】泰州SEO优化、泰州微信公众号APP客户端小程序开发、泰州网站托管、泰州APP开发
泰州,简称“泰”,古称海陵,是江苏省地级市,长江三角洲中心区27城之一 [1] ,国务院批复确定的中国长江三角洲地区重要的工贸港口城市 [2] 。截至2018年,全市下辖3个区、代管3个县级市,总面积5787.26平方千米,常住人口463.57万人,城镇人口305.96万人,城镇化率66.0%,全年实现社会消费品零售总额1282.87亿元。 [3]
泰州地处中国华东地区、江苏中部,是扬子江城市群重要组成部分,南濒长江、北邻盐城、东临南通、西接扬州,是承南启北的水陆要津,为苏中门户,自古有“水陆要津,咽喉据郡”之称。700多年前,马可·波罗游历泰州,称赞“这城不很大,但各种尘世的幸福极多”。 [4]
泰州是国家历史文化名城,秦称海阳,汉称海陵,州建南唐,文昌北宋。南唐时(公元937年)为州治,取“国泰民安”之意,始名泰州。泰州人文荟萃、名贤辈出,“儒风之盛,素冠淮南”。王艮、刘熙载、施耐庵、郑板桥、梅兰芳是泰州文化艺术史上的杰出代表。 [4]
泰州所辖县市(区)全部建成国家级生态示范区、全国百强县,同时泰州也是全国文明城市 [5] 、国家环保模范城市 [6] 、国家园林城市、中国优秀旅游城市、全国科技进步先进市、第一批国家农业可持续发展试验示范区。2017年中国地级市全面小康指数排名第42 [7] 。
2018年11月,入选中国城市全面小康指数前100名。 [8] 12月,被评为2018中国大陆最佳商业城市100强。2020年10月9日,被生态环境部授予第四批国家生态文明建设示范市县称号。2020年10月,被评为全国双拥模范城(县)。
c2/17/Soundex.h
std::string encodedDigits(const std::string& word) const {➤ if (word.length() > 1) return encodedDigit();
return "";
}➤ std::string encodedDigit() const {➤ return "1";➤ }复制代码我们要以测试驱动方法开发更多的辅音变换逻辑(如c对应2、d对应3,等等),使解决方案更具通用性。为此,应该在ReplacesConsonantsWithAppropriateDigits中加一个断言,还是再创建一个测试呢?
TDD的经验法则是一个测试一个断言。我们提倡专注测试行为,而非测试功能函数。大部分时候要遵从这一个规则。
对第二个辅音进行编码的断言不像是另一个行为。如果创建一个这样的测试,该怎么命名呢?难道是ReplacesBWith1、ReplacesCWith2……?
向测试中加入第二个断言来表示一个测试用例的情况比较少。我们希望一个断言失败时,其他的代码能继续执行。为此,我们使用Google Mock提供的EXPECT_THAT宏而非ASSERT_THAT。
c2/18/SoundexTest.cpp
TEST_F(SoundexEncoding, ReplacesConsonantsWithAppropriateDigits) {➤ EXPECT_THAT(soundex.encode("Ab"), Eq("A100"));➤ EXPECT_THAT(soundex.encode("Ac"), Eq("A200"));
}复制代码上述代码中,第二个辅音处理情形需要一个if分支来处理特殊的情况。
c2/18/Soundex.h
std::string encodedDigits(const std::string& word) const {➤ if (word.length() > 1) return encodedDigit(word[1]);
return "";
}➤ std::string encodedDigit(char letter) const {➤ if (letter == 'c') return "2";
return "1";
}复制代码再加上第三种数据输入情形。
c2/19/SoundexTest.cpp
TEST_F(SoundexEncoding, ReplacesConsonantsWithAppropriateDigits) {
EXPECT_THAT(soundex.encode("Ab"), Eq("A100"));
EXPECT_THAT(soundex.encode("Ac"), Eq("A200"));➤ EXPECT_THAT(soundex.encode("Ad"), Eq("A300"));
}复制代码第三个辅音处理情形让事情变得明朗,需要用一个基于哈希(hash)的集合代替简单的if分支。
c2/19/Soundex.h
std::string encodedDigit(char letter) const {➤ const std::unordered_map<char,std::string> encodings {➤ {'b', "1"},➤ {'c', "2"},➤ {'d', "3"}➤ };➤ return encodings.find(letter)->second;
}复制代码现在,需要写代码支持其余的辅音转换。问题是,每个辅音转换功能都需要以测试驱动方式开发吗?
在TDD诞生初期有个口头禅:“可能出问题的地方都需要测试。”人们常常会问:“我需要测试什么?”这个口头禅算是一个漫不经心的回复。事实上,encoding中的映射(map)操作出现问题的风险比较小。不挨个测试一遍,应该也不会出什么问题。
一个相反的观点是,什么都可能出问题,无论它多么简单(我以前就是这样的,嘿嘿)。对重复数据越是感到乏味,犯错误的几率越大,甚至不会注意到已经犯错了。测试可以降低犯错的几率。
另外,测试好比一个辅音转换为数字的清晰文档(虽然你有可能辩称表格本身就是一个再清楚不过的文档了)。反过来,如果创建一个有几百个元素的表格,为每个都提供测试似乎很荒唐。
正确答案是什么?考量的重点在于我们在做测试驱动开发,而非测试。你或许会问:这有什么不同吗?答案是肯定的。用测试的技巧,你会全面地分析规范(也有可能是代码),并创建大量的测试来罗列各种行为。TDD则着力于代码设计。测试主要用于表述你要构建的行为。TDD过程中编写的测试大都是这个流程的附属产物。有了这些测试,在接下来改动代码时,你会更有信心。
其实,TDD与测试之间的区别很微妙。TDD的一个重要方面就是秉承够用心态。你写的测试只是为开发代码做准备。当要开发下一个行为时,再写测试。如果代码逻辑不再变,就可以不用写测试了。
当然,实际经验起决定作用。直到发布一个缺陷时,TDD都能很好地工作。但是,一旦选择TDD,还是要提醒自己采取更小、更安全的步伐。
既然选择了TDD,那就来完成转换表吧!
c2/20/Soundex.h
std::string encodedDigit(char letter) const {
const std::unordered_map<char, std::string> encodings {➤ {'b', "1"}, {'f', "1"}, {'p', "1"}, {'v', "1"},➤ {'c', "2"}, {'g', "2"}, {'j', "2"}, {'k', "2"}, {'q', "2"},➤ {'s', "2"}, {'x', "2"}, {'z', "2"},➤ {'d', "3"}, {'t', "3"},➤ {'l', "4"},➤ {'m', "5"}, {'n', "5"},➤ {'r', "6"}
};
return encodings.find(letter)->second;
}

服务热线
顶部
备案号: 苏ICP备11067224号
CopyRight © 2011 书生商友信息科技 All Right Reserved
24小时服务热线:400-111-6878 E-MAIL:1120768800@qq.com QQ:1120768800
网址: http://www.768800.com 网站建设:上往建站
关键词: 网站建设| 域名邮箱| 服务器空间| 网站推广| 上往建站| 网站制作| 网站设计| 域名注册| 网络营销| 网站维护|
企业邮箱| 虚拟主机| 网络建站| 网站服务| 网页设计| 网店美工设计| 网站定制| 企业建站| 网站设计制作| 网页制作公司|
400电话办理| 书生商友软件| 葬花网| 调温纤维| 海洋馆运营维护| 北京保安公司| 殡仪馆服务| 殡葬服务| 苏州殡葬一条龙| 朝阳殡葬| 苏州殡葬服务|
欢迎您免费咨询,请填写以下信息,我们收到后会尽快与您联系
服务热线:400-111-6878