Unit测试模式:测试码重构PDF电子书下载
- 电子书积分:18 积分如何计算积分?
- 作 者:(美)梅扎罗斯著
- 出 版 社:北京:清华大学出版社
- 出版年份:2009
- ISBN:9787302191384
- 页数:631 页
第Ⅰ部分 总述 3
第1章 概览 3
1.1关于本章 3
1.2可能有效的最简单的测试自动化策略 3
开发过程 3
客户测试 4
单元测试 5
易测性设计 5
测试组织 6
1.3接下来要讨论的问题 6
第2章 测试味道 7
2.1关于本章 7
2.2测试味道简介 7
什么是测试味道 7
测试味道的种类 8
如何处理味道 8
2.3味道的种类 9
项目味道 9
行为味道 10
代码味道 11
2.4接下来要讨论的问题 12
第3章 测试自动化的目标 13
3.1关于本章 13
3.2为什么要测试 13
3.3测试自动化的目标 14
测试应该有助于提高质量 15
测试应该有助于理解SUT 16
测试应该降低(而不是引入)风险 16
测试应该易于运行 17
测试应该易于写和维护 19
随着系统的发展,测试应该只需要最低限度的维护 20
3.4接下来要讨论的问题 20
第4章 测试自动化的基本观点 21
4.1关于本章 21
4.2这些基本观点的重要性 21
4.3一些不同的基本观点 22
首先测试还是最后测试 22
测试还是示例 22
逐个测试还是全部一起测试 22
从外到内还是从内到外 23
状态验证还是行为验证 24
事先进行夹具设计还是逐个测试 25
4.4理解不同观点的存在 25
4.5我的基本观点 25
4.6接下来要讨论的问题 26
第5章 测试自动化的原则 27
5.1关于本章 27
5.2原则 27
原则:首先写测试(也称为测试驱动开发、测试优先开发) 27
原则:易测性设计 28
原则:使用前门优先(也称为前门优先) 28
原则:交流意图(也称为高级语言,简单易读) 28
原则:不要修改SUT 28
原则:保持测试独立(也称为独立测试) 29
原则:隔离SUT 29
原则:最小化测试重叠 30
原则:最小化不可测试的代码 30
原则:保持测试逻辑与产品代码分离(也称为产品代码中无测试逻辑) 31
原则:每个测试验证一种条件(也称为单一条件测试) 31
原则:单独测试关注点 32
原则:确保相同标准的努力和责任 32
5.3接下来要讨论的问题 32
第6章 测试自动化策略 33
6.1关于本章 33
6.2什么是策略 33
6.3应该自动化哪些类型的测试 34
总功能性测试 34
交叉功能测试 35
6.4使用哪些工具来自动化各种测试 36
测试自动化的方法 37
xUnit简介 38
使用xUnit的最佳时机 39
6.5使用哪种测试夹具策略 39
什么是夹具 40
主要的夹具策略 40
暂时新鲜夹具 42
永久新鲜夹具 42
共享的夹具策略 43
6.6如何确保易测性 44
最后测试——非常危险 44
易测性设计——在最前面 44
测试驱动易测性 45
控制点和观察点 45
交互风格与易测性模式 46
划分与测试 49
6.7接下来要讨论的问题 50
第7章 xUnit基础 51
7.1关于本章 51
7.2 xUnit简介 51
7.3共同特征 51
7.4最低要求 52
定义测试 53
什么是夹具 53
定义测试套件 53
运行测试 54
测试结果 54
7.5 xUnit的本质 55
测试命令 56
测试套件对象 56
7.6过程化世界里的xUnit 57
7.7接下来要讨论的问题 57
第8章 暂时夹具管理 59
8.1关于本章 59
8.2测试夹具术语 59
什么是夹具 60
什么是新鲜夹具 60
什么是暂时新鲜夹具 61
8.3建立新鲜夹具 61
内联夹具建立 61
委托夹具建立 62
隐式夹具建立 63
SetUp方法的滥用 64
混合夹具建立 65
8.4拆卸暂时新鲜夹具 65
8.5接下来要讨论的问题 65
第9章 永久夹具管理 67
9.1关于本章 67
9.2管理永久新鲜夹具 67
什么让夹具变得永久 67
永久新鲜夹具产生的问题 68
拆卸永久新鲜夹具 68
避免拆卸的需要 71
处理缓慢测试 72
9.3管理共享的夹具 72
访问共享夹具 73
引发共享夹具结构 73
9.4接下来要讨论的问题 75
第10章 结果验证 77
10.1关于本章 77
10.2让测试自检 77
10.3状态验证 78
使用内置断言 79
Delta断言 80
外部结果验证 80
10.4验证行为 80
过程行为验证 81
预期行为规范 82
10.5减少测试码复制 82
预期对象 83
自定义断言 84
结果描述验证方法 84
参数化测试和数据驱动测试 85
10.6避免条件测试逻辑 86
排除if语句 87
排除循环 87
10.7其他方法 88
逆向操作,由外到内 88
使用测试驱动开发来写测试实用程序方法 88
10.8将可重复使用的验证逻辑放在哪里 89
10.9接下来要讨论的问题 89
第11章 使用测试替身 91
11.1关于本章 91
11.2什么是间接输入和间接输出 91
为什么要关注间接输入 91
为什么要关注间接输出 92
如何控制间接输入 93
如何验证间接输出 94
11.3使用替身测试 96
测试替身的类型 97
提供测试替身 102
配置测试替身 103
安装测试替身 104
11.4测试替身的其他用法 108
内窥镜测试 108
需求驱动开发 108
加速夹具建立 108
加速测试执行 109
11.5其他需要考虑的问题 109
11.6接下来要讨论的问题 109
第12章 组织测试 111
12.1关于本章 111
12.2基本的xUnit机制 111
12.3合理精简测试方法 111
12.4测试方法和测试用例类 113
每个类一个测试用例类 113
每种特征一个测试用例类 113
每个夹具一个测试用例类 114
选择测试方法组织策略 115
12.5测试命名约定 115
12.6组织测试套件 116
运行测试组 117
运行单个测试 117
12.7测试码重用 118
测试实用程序方法位置 118
测试用例继承与重用 119
12.8测试文件组织 119
内置自测 119
测试程序包 120
测试依赖 120
12.9接下来要讨论的问题 120
第13章 使用数据库的测试 121
13.1关于本章 121
13.2使用数据库的测试 121
数据库测试的原因 121
数据库带来的问题 122
13.3不使用数据库的测试 123
13.4测试数据库 124
测试存储过程 124
测试数据访问层 125
确保开发人员独立 125
13.5使用数据库测试(再次!) 126
13.6接下来要讨论的问题 126
第14章 有效测试自动化的路线图 127
14.1关于本章 127
14.2测试自动化的困难 127
14.3高度可维护的自动化测试的路线图 128
执行快乐路径代码 129
验证快乐路径的直接输出 129
验证备选路径 129
验证间接输出行为 130
最优化测试执行和维护 130
14.4接下来要讨论的问题 131
第Ⅱ部分 测试味道 135
第15章 代码味道 135
15.1模糊测试(也称为长测试、复杂测试、冗长测试) 135
症状 135
影响 135
原因 135
解决方案模式 145
15.2条件测试逻辑(也称为缩排的测试码) 146
症状 146
影响 147
原因 147
15.3难以测试的代码 152
症状 153
影响 153
解决方案模式 153
原因 153
15.4测试码复制 155
症状 155
影响 156
原因 156
高级阅读 157
15.5产品中的测试逻辑 158
症状 158
影响 158
原因 158
高级阅读 161
第16章 行为味道 163
16.1断言滚轮 163
症状 163
影响 163
原因 163
高级阅读 165
16.2不稳定测试 165
症状 165
影响 166
检修建议 166
原因 166
16.3脆弱测试 173
症状 174
影响 174
检修建议 174
原因 175
高级阅读 179
16.4频繁调试(也称为手动调试) 179
症状 179
原因 179
影响 180
解决方案模式 180
16.5手动干预 180
症状 180
影响 180
原因 181
高级阅读 182
16.6缓慢测试 182
症状 182
影响 182
检修建议 183
原因 183
第17章 项目味道 187
17.1缺陷测试 187
症状 187
影响 187
原因 187
检修建议 188
解决方案模式 188
17.2开发人员没有写测试 189
症状 189
影响 189
原因 189
检修建议 190
17.3高测试维护成本 190
症状 190
影响 191
原因 191
检修建议 192
17.4产品缺陷 192
症状 192
影响 192
原因 192
第Ⅲ部分 模式 201
第18章 测试策略模式 201
18.1记录测试(也称为记录与回放测试、机器人用户测试、捕获/回放测试) 201
运行原理 202
使用时机 202
实现方式说明 203
示例:内置测试记录 203
示例:商业记录与回放测试工具 204
重构说明 206
示例:重构的商业记录测试 206
高级阅读 207
18.2脚本测试(也称为手写测试、手动编码测试、程序测试、自动化单元测试) 207
运行原理 208
使用时机 208
实现方式说明 208
示例:脚本测试 208
关于名称 209
高级阅读 209
18.3数据驱动测试 209
运行原理 210
使用时机 210
实现方式说明 211
启发示例 213
重构说明 214
示例:使用XML数据文件的xUnit数据驱动测试 214
示例:使用CSV输入文件的xUnit数据驱动测试 215
示例:使用Fit架构的数据驱动测试 216
18.4测试自动化架构 217
运行原理 218
这样做的原因 218
实现方式说明 218
示例:测试自动化架构 219
高级阅读 219
18.5最小夹具(也称为最小上下文) 220
这样做的原因 220
实现方式说明 220
18.6标准夹具(也称为标准上下文) 221
运行原理 222
使用它的时机 222
实现方式说明 223
启发示例 224
重构说明 224
示例:标准夹具 225
18.7新鲜夹具(也称为新鲜上下文、私有夹具) 226
运行原理 226
使用时机 226
实现方式说明 227
保留夹具的原因 227
新鲜夹具建立 228
启发示例 229
重构说明 229
示例:新鲜夹具 229
18.8共享夹具(也称为共享上下文、遗留夹具、重用的夹具、陈旧夹具) 230
运行原理 231
使用时机 231
实现方式说明 234
重构说明 235
示例:共享夹具 235
示例:不可变的共享夹具 237
18.9后门操作(也称为层交叉测试) 238
运行原理 238
使用时机 238
实现方式说明 240
启发示例 241
重构说明 242
示例:使用测试间谍的后门结果验证 242
示例:后门夹具建立 242
高级阅读 244
18.10层测试(也称为单层测试、逐层测试或分层测试) 245
运行原理 246
使用时机 246
实现方式说明 247
启发示例 248
重构说明 249
示例:表示层测试 249
示例:皮下测试 250
示例:业务层测试 251
第19章 xUnit基本模式 253
19.1测试方法 253
运行原理 253
这样做的原因 254
实现方式说明 254
示例:简单成功测试 256
示例:使用try/catch的预期异常测试 257
示例:使用方法属性的预期异常测试 258
示例:使用代码块/闭包的预期异常测试 258
示例:构造函数测试 259
19.2四阶段测试 260
运行原理 261
这样做的原因 261
实现方式说明 262
示例:四阶段测试(内联) 262
示例:四阶段测试(隐式建立/拆卸) 262
19.3断言方法 263
运行原理 264
这样做的原因 264
实现方式说明 264
启发示例 266
重构说明 267
示例:相等性断言 268
示例:模糊相等性断言 268
示例:确定结果断言 268
示例:预期异常断言 268
示例:单一结果断言 269
19.4断言消息 269
运行原理 269
使用时机 269
实现方式说明 270
启发示例 270
重构说明 271
示例:异常描述消息 271
19.5测试用例类 271
运行原理 272
这样做的原因 272
实现方式说明 273
示例:测试用例类 273
高级阅读 274
19.6测试运行器 274
运行原理 275
这样做的原因 275
实现方式说明 275
19.7测试用例对象 278
运行原理 278
这样做的原因 278
实现方式说明 279
示例:测试用例对象 280
19.8测试套件对象 281
运行原理 281
这样做的原因 281
实现方式说明 282
示例:测试套件对象 282
示例:使用测试枚举构建的套件的套件 283
示例:测试套件过程 284
19.9测试发现 286
运行原理 286
使用时机 286
实现方式说明 287
启发示例 287
重构说明 288
示例:测试方法发现(使用方法命名和编译器宏) 288
示例:测试方法发现(使用方法命名) 288
示例:测试方法发现(使用方法属性) 289
示例:测试用例类发现(使用类属性) 290
示例:测试用例类发现(使用公共位置和测试用例超类) 290
19.10测试枚举(也称为:测试套件工厂) 290
运行原理 291
使用它的时机 291
实现方式说明 291
示例:CppUnit中的测试方法枚举 292
示例:测试方法调用(硬编码的) 293
示例:测试套件枚举 293
19.11测试选择 294
运行原理 294
使用时机 294
实现方式说明 295
示例:使用类属性的测试用例类选择 295
示例:使用方法属性的测试方法选择 295
第20章 夹具建立模式 297
20.1内联建立 297
运行原理 298
使用时机 298
实现方式说明 298
示例:内联建立 298
重构说明 299
20.2委托建立 299
运行原理 300
使用时机 300
实现方式说明 300
启发示例 300
重构说明 301
示例:委托建立 301
20.3创建方法 302
运行原理 303
使用时机 303
实现方式说明 305
启发示例 305
重构说明 306
示例:匿名创建方法 306
示例:参数化创建方法 307
示例:附件方法 307
示例:重复用于夹具建立的测试 308
20.4隐式建立(也称为:挂钩建立、调用架构建立、共享建立方法) 309
运行原理 310
使用时机 310
实现方式说明 310
启发示例 311
重构说明 312
示例:隐式建立 312
20.5预制夹具(也称为:预制上下文、测试台) 313
运行原理 313
使用时机 313
实现方式说明 314
启发示例 315
重构说明 316
示例:预制夹具测试 316
示例:夹具建立测试用例 316
示例:使用数据填充脚本的预制夹具建立 317
20.6延迟建立 317
运行原理 318
使用时机 318
实现方式说明 319
启发示例 319
重构说明 321
示例:延迟建立 321
20.7套件夹具建立 322
运行原理 323
使用时机 323
实现方式说明 323
启发示例 324
重构说明 325
示例:套件夹具建立 325
关于名称 327
高级阅读 327
20.8建立装饰器 327
运行原理 328
使用时机 328
实现方式说明 328
启发示例 330
重构说明 330
示例:硬编码的建立装饰器 330
示例:参数化建立装饰器 331
示例:抽象装饰器类 332
20.9链接测试 332
运行原理 333
使用时机 333
实现方式说明 334
启发示例 335
重构说明 336
示例:链接测试 336
第21章 结果验证模式 339
21.1状态验证(也称为:基于状态的测试) 339
运行原理 340
使用时机 340
实现方式说明 340
启发示例 341
重构说明 342
示例:过程状态验证 342
示例:预期对象 342
21.2行为验证(也称为:交互测试) 343
运行原理 343
使用时机 344
实现方式说明 344
启发示例 345
重构说明 346
示例:过程行为验证 346
示例:预期行为规范 347
21.3自定义断言(也称为:预约断言) 347
工作原理 348
使用时机 348
实现方式说明 350
启发示例 351
重构说明 352
示例:自定义断言 352
示例:域断言 353
示例:验证方法 354
示例:自定义断言测试 355
21.4 Delta断言 356
运行原理 356
使用时机 357
实现方式说明 357
启发示例 358
重构说明 358
示例:Delta断言 358
21.5哨兵断言 359
运行原理 360
使用时机 360
实现方式说明 360
启发示例 361
重构说明 361
示例:简单哨兵断言 361
示例:共享夹具哨兵断言 362
21.6未完成的测试断言 362
运行原理 363
使用时机 363
实现方式说明 363
启发示例 364
重构说明 364
示例:未完成的测试断言 364
示例:使用模板的未完成的测试方法生成 365
第22章 夹具拆卸模式 367
22.1无用单元收集拆卸 367
运行原理 367
使用时机 368
实现方式说明 368
启发示例 368
重构说明 369
示例:无用单元收集拆卸 369
22.2自动拆卸(也称为:测试对象注册库) 369
运行原理 370
使用时机 370
实现方式说明 370
启发示例 371
重构说明 372
示例:自动拆卸 372
示例:自动执行拆卸 374
22.3内联拆卸 374
运行原理 375
使用时机 375
实现方式说明 376
启发示例 376
示例:天真内联拆卸 377
重构说明 377
示例:内联拆卸 377
示例:拆卸哨兵子句 378
示例:多种资源内联 378
拆卸(Java) 378
示例:委托拆卸 379
22.4隐式拆卸(也称为:关联拆卸、调用架构拆卸、拆卸方法) 380
运行原理 381
使用时机 381
实现方式说明 381
启发示例 381
重构说明 382
示例:隐式拆卸 382
第23章 测试替身模式 385
23.1测试替身(也称为冒名顶替者) 385
运行原理 386
使用时机 386
实现方式说明 388
示例:测试替身 389
23.2测试桩(也称为:桩) 390
运行原理 390
使用时机 390
实现方式说明 391
启发示例 392
重构说明 393
示例:响应器(作为手动编码的测试桩) 393
示例:响应器(动态生成) 394
示例:破坏者(作为匿名内部类) 395
示例:实体链裁剪 395
高级阅读 397
23.3测试间谍(也称为:间谍、记录测试桩) 397
运行原理 398
使用时机 398
实现方式说明 399
启发示例 399
重构说明 400
示例:测试间谍 400
23.4仿制对象 402
运行原理 402
使用时机 403
实现方式说明 403
启发示例 404
重构说明 405
示例:仿制对象(手动编码的) 405
示例:仿制对象(动态生成的) 406
高级阅读 407
23.5伪造对象(也称为:哑元) 407
运行原理 408
使用时机 408
实现方式说明 409
启发示例 410
重构说明 411
示例:伪造数据库 411
高级阅读 412
23.6可配置的测试替身(也称为:可配置的仿制对象、可配置的测试间谍、可配置的测试桩) 412
运行原理 413
使用时机 413
实现方式说明 413
启发示例 415
重构说明 417
示例:使用设置者的配置接口 417
示例:使用表达式生成器的配置接口 418
示例:配置模式 419
23.7硬编码的测试替身(也称为:硬编码的仿制对象、硬编码的测试桩、硬编码的测试间谍) 420
运行原理 421
使用时机 421
实现方式说明 421
启发示例 423
重构说明 423
示例:测试替身类 424
示例:自分流/回送 424
示例:子类化内部测试替身 425
示例:从伪类子类化的内部测试替身 426
高级阅读 428
23.8测试专用子类(也称为:测试专用扩充) 429
运行原理 429
使用时机 430
实现方式说明 431
启发示例 431
重构说明 433
示例:修改行为的子类(测试桩) 433
示例:修改行为的子类(代替的单态) 434
示例:提供行为的子类 435
示例:定义测试专用相等性(修改行为的子类) 436
示例:提供状态的子类 437
第24章 测试组织模式 439
24.1命名测试套件 439
运行原理 440
使用时机 440
实现方式说明 440
重构说明 441
示例:全部测试套件 441
示例:专用目的套件 442
示例:单个测试套件 442
示例:冒烟测试套件 443
24.2测试实用程序方法 444
运行原理 444
使用时机 445
实现方式说明 447
启发示例 447
重构说明 448
示例:测试实用程序方法 449
24.3参数化测试 450
运行原理 451
使用时机 451
实现方式说明 452
启发示例 453
重构说明 454
示例:参数化测试 454
示例:独立表格测试 455
示例:递增的表格测试 456
示例:使用架构支持的表格测试(MbUnit) 456
示例:循环驱动测试(枚举值) 457
示例:循环驱动测试(计算值) 457
24.4每个类一个测试用例类 458
运行原理 459
使用时机 459
实现方式说明 459
24.5每种特征一个测试用例类 464
运行原理 465
使用时机 465
实现方式说明 466
启发示例 466
重构说明 467
示例:每种特征一个测试用例类 468
24.6每个夹具一个测试用例类 469
运行原理 470
使用时机 470
实现方式说明 471
启发示例 471
重构说明 473
示例:每个夹具一个测试用例类 473
24.7测试用例超类(也称为抽象测试用例、抽象测试夹具、测试用例基类) 475
运行原理 476
使用时机 476
实现方式说明 477
启发示例 477
重构说明 477
示例:测试用例超类 478
示例:测试辅助混入 478
24.8测试辅助 480
运行原理 480
使用时机 480
实现方式说明 481
启发示例 482
重构说明 482
示例:使用类方法的测试辅助 483
示例:使用实例方法的测试辅助 483
第25章 数据库模式 485
25.1数据库沙盒 485
运行原理 486
使用时机 486
实现方式说明 486
启发示例 487
重构说明 487
示例:数据库分区方案 488
25.2存储过程测试 488
运行原理 489
使用时机 489
实现方式说明 489
启发示例 491
重构说明 492
示例:数据库内存储过程测试 492
示例:远程存储过程测试 493
25.3表格截断拆卸 493
运行原理 494
使用时机 494
实现方式说明 495
启发示例 496
重构说明 496
示例:表格截断(委托)拆卸测试 496
示例:延迟拆卸测试 497
示例:使用SQL的表格截断拆卸 498
示例:使用ORM的表格截断拆卸 498
25.4事务回滚拆卸 499
运行原理 500
使用时机 500
实现方式说明 501
启发示例 502
重构说明 502
示例:对象事务回滚拆卸 503
示例:数据库事务回滚拆卸 504
第26章 易测性设计模式 507
26.1依赖注入 507
运行原理 507
使用时机 508
实现方式说明 508
启发示例 510
重构说明 510
示例:参数注入 511
示例:构造函数注入 511
示例:设置者注入 512
26.2依赖查找(也称为:服务定位器、对象工厂、组件代理、组件注册库) 513
运行原理 514
使用时机 514
实现方式说明 515
启发示例 516
重构说明 517
示例:可配置的注册库 517
示例:代替的单态 518
关于名称 520
26.3低级对象 520
运行原理 521
使用时机 521
实现方式说明 522
启发示例(低级可执行) 524
重构说明 525
示例:穷人的低级对象 526
示例:真正低级可执行 526
示例:低级对话 528
示例:低级事务控制器 531
26.4测试挂钩 531
运行原理 531
使用时机 532
实现方式说明 532
启发示例 532
重构说明 533
示例:被测系统的测试挂钩 533
示例:依赖组件中的测试挂钩 533
第27章 值模式 535
27.1字面值(也称为:硬编码值、常量值) 535
运行原理 535
使用时机 535
实现方式说明 536
示例:字面值 536
重构说明 537
示例:符号常量 537
示例:自述值 537
示例:不同值 538
27.2派生值(也称为:计算值) 538
运行原理 538
使用时机 539
启发示例 539
重构说明 540
示例:派生预期 540
示例:一种坏属性 540
27.3生成值 542
运行原理 542
使用时机 542
实现方式说明 543
启发示例 543
重构说明 544
示例:不同生成值 544
示例:相关生成值 545
27.4哑元对象(也称为:哑元、哑元参数、哑元值、占位符、桩) 545
运行原理 546
使用时机 546
实现方式说明 546
启发示例 547
重构说明 548
示例:哑元值和哑元对象 548
第Ⅳ部分 附录 553
附录A 测试重构 553
附录B xUnit术语 559
附录C xUnit家族成员 565
附录D 工具 571
附录E 目标和原则 577
附录F 味道、别名和原因 579
附录G 模式、别名和变体 583
术语表 595
参考文献 619
- 《土壤环境监测前沿分析测试方法研究》中国环境监测总站编著 2018
- 《知识管理背景下的档案管理模式》曾祯,金瑞,王聪颖著 2019
- 《计算机自适应英语语用能力测试系统设计与效度验证 以TEM4词汇与语法题为例》张一鑫著 2019
- 《海河干流水环境质量与经济发展模式研究》于航白景峰,张春意 2019
- 《无机及分析测试技术》李巍巍 2018
- 《汉语口语测试评分员评价研究》黄霆玮著 2019
- 《互联网+时代的日语教学模式探究》郭晓雪著 2019
- 《北京模式》吴建繁,王德海,朱岩编 2017
- 《奥数教程能力测试 高一年级 第2版》单墫,熊斌总主编;熊斌编著 2014
- 《高校教学模式创新与实践研究 2017年》何聚厚 2019
- 《大学计算机实验指导及习题解答》曹成志,宋长龙 2019
- 《指向核心素养 北京十一学校名师教学设计 英语 七年级 上 配人教版》周志英总主编 2019
- 《大学生心理健康与人生发展》王琳责任编辑;(中国)肖宇 2019
- 《大学英语四级考试全真试题 标准模拟 四级》汪开虎主编 2012
- 《大学英语教学的跨文化交际视角研究与创新发展》许丽云,刘枫,尚利明著 2020
- 《北京生态环境保护》《北京环境保护丛书》编委会编著 2018
- 《复旦大学新闻学院教授学术丛书 新闻实务随想录》刘海贵 2019
- 《大学英语综合教程 1》王佃春,骆敏主编 2015
- 《大学物理简明教程 下 第2版》施卫主编 2020
- 《指向核心素养 北京十一学校名师教学设计 英语 九年级 上 配人教版》周志英总主编 2019