单元测试经验分享

合集下载

单元测试小结

单元测试小结

单元测试小结在软件开发过程中,单元测试是一种用于验证代码模块功能的测试方法。

通过单元测试,可以确保每个代码模块按预期工作。

这次的单元测试我主要使用了Junit框架进行测试,并结合实际情况使用了Mockito进行模拟对象。

在这次的单元测试中,我遇到了一些问题,但也学到了一些经验。

首先,我发现在编写单元测试时,需要先挑选哪些方法需要被测试。

这需要根据需求和代码逻辑来确定。

在这次测试中,我遵循了一种常用的方式,即对每个公共方法进行测试,以确保其按预期工作。

这个过程中,我注意到编写一个好的测试用例并不容易。

测试用例需要覆盖到代码的各个分支和边界条件,这需要对代码进行仔细的分析和思考。

其次,我发现在编写单元测试时,需要考虑到代码的依赖关系。

在这次的测试中,我使用了Mockito框架来模拟一些对象。

这样可以减少对外部服务的依赖,使得测试更加独立和可靠。

然而,使用Mockito时也需要注意一些细节,比如正确设置模拟对象的行为和返回值。

此外,我还发现在编写单元测试时,需要考虑不同的测试覆盖率。

通常,我们可以通过不同的这个数值来表示测试的覆盖率。

在这次的测试中,我试图尽可能地覆盖代码的各个分支和边界条件。

这可以帮助我发现潜在的问题,并使得代码更加健壮和可靠。

最后,我发现在编写单元测试时,需要考虑到测试的可维护性。

这意味着测试用例应该易于理解和修改。

在这次的测试中,我尽量保持测试代码的简洁和清晰。

我使用了一些命名规范和注释,以帮助他人更好地理解我的测试用例。

通过这次的单元测试,我学到了很多关于单元测试的知识和经验。

我发现编写一个好的测试用例并不容易,但这是非常重要的。

单元测试可以帮助我们发现潜在的问题,并提高软件的质量。

我会继续努力学习和提高自己的单元测试能力,以便更好地开发高质量的软件。

单元测试上机总结

单元测试上机总结

单元测试上机总结引言单元测试作为软件开发过程中的一个重要环节,旨在保证软件的质量和稳定性。

通过在项目的不同单元中进行测试,可以帮助开发人员发现代码逻辑错误和潜在的问题。

本篇文档旨在总结本次单元测试上机的经验和感悟,讨论其中的挑战和解决方法。

项目背景在本次单元测试上机中,我们的任务是针对给定的代码实现编写单元测试用例。

该项目是一个简单的计算器应用,提供了基本的数学运算功能。

核心代码逻辑已经实现,我们需要在此基础上编写单元测试用例,以验证代码的正确性。

挑战与解决方法1. 代码复杂度在编写单元测试用例时,面临的第一个挑战是代码的复杂度。

复杂的代码逻辑可能会导致难以确定正确的测试覆盖范围。

为了解决这个问题,我们可以采用以下策略:•针对每个函数编写多个测试用例,覆盖各种可能的输入情况。

•使用边界测试,以验证函数在边界输入情况下的行为。

•利用代码覆盖率工具,如pytest等,辅助判断测试覆盖的范围。

2. 依赖关系部分代码中可能存在依赖关系,即一个函数的执行依赖于其他函数或模块的正确性。

在进行单元测试时,需要解决这些依赖关系。

解决方法包括:•使用模拟(mock)对象来代替被依赖的对象,以确保测试的独立性。

•在测试用例中显式地设置依赖对象的返回值,以模拟各种情况。

3. 异常处理在编写单元测试用例时,需要特别关注函数对各种异常情况的处理能力。

因为异常情况往往是代码中比较容易出错的部分。

解决方法如下:•编写针对各种异常情况的测试用例,以确保代码能够正确捕获和处理异常。

•使用断言(assert)来验证函数对异常情况的响应与预期一致。

4. 测试边界在进行单元测试时,要考虑各种不同的输入情况,包括边界输入。

测试边界情况可以帮助我们找出代码中可能存在的问题。

解决问题的方法如下:•针对每个函数编写多个边界测试用例,以验证函数在边界输入情况下的行为。

•使用测试框架提供的参数化功能,批量生成多个边界测试用例。

总结通过本次单元测试上机实践,我对单元测试的重要性有了更深的理解,也学到了许多解决问题的方法。

单元测试总结范文(精选6篇)

单元测试总结范文(精选6篇)

单元测试总结单元测试总结范文(精选6篇)总结是指对某一阶段的工作、学习或思想中的经验或情况进行分析研究,做出带有规律性结论的书面材料,它能帮我们理顺知识结构,突出重点,突破难点,因此好好准备一份总结吧。

但是却发现不知道该写些什么,下面是小编收集整理的单元测试总结范文(精选6篇),希望能够帮助到大家。

单元测试总结1这次单元测试,孩子们都取得了很大的进步,班里有三十多个孩子得了A,只有三个孩子是在B以下。

总结一下孩子们进步之处:1、基础知识掌握的比以前要准确、牢固了。

看拼音写词语,多音字,组词等对题率比较高,我想只要孩子们每一次老师布置听写时都能按要求去做,平时注重积累,考试时基础知识部分是没有问题的。

所以我们不妨对孩子提高要求,每次测试,基础题部分必须要都做对才行,会得就要保证做对。

2、听讲效率提高了,所以很多课上老师讲的重点内容都记得比较清楚。

经过一个多月的努力,咱班孩子的听讲效率有提高,很多孩子已经能够做到在老师讲课的时候抬起头来听,这是一个非常好的习惯,抬头看老师,看黑板,才能少走神,积极思考,多数走神的孩子都是上课的时候无所事事,低着头,天马行空的乱想。

再一个就是孩子回答问题的积极性提高了,家长多关注孩子回答问题的情况,每次下了课都会给回答问题的孩子盖小印章。

存在的问题:这次测试,有一个孩子没写名字,这种现象在平时也常见,发下本子获纸张不写上名字,等找不到了再找老师,这是个很不好的习惯。

1、漏题。

这一点很可怕,明明卷子上有这道题就是看不见,说明我们的孩子在做题的时候不是很踏实,做题审题的习惯不好,多数漏下的题是去文中加标点画线的题,很多孩子做题不是按序号来,而是去找空,一看没有要求填的空,就连读都不读,结果就漏题了。

我经常给孩子们说,书上和卷子上没有多余的字,静下心来每个字都要读到。

平时做大本,也有漏题的现象,我想还是要多关注孩子的做题习惯。

2、不审题。

这和漏题的情况差不多,都是没有读完整题目要求就做题,这次测试的第二题,题目要求是画横线,有10个孩子都画成了对号,这个比例还是比较大的。

单元测试的艺术总结

单元测试的艺术总结

单元测试的艺术总结
在进行单元测试时,有几个关键点需要注意和总结:
1. 良好的单元测试应该是可靠、可重复的。

即使多次运行,测试结果也应该是一致的。

要尽量避免测试结果受到环境或外部因素的影响。

2. 单元测试应该是独立的,不依赖于其他组件或外部资源。

为了实现独立性,可以使用模拟或替代的方式来处理一些依赖关系。

3. 单元测试应该使用足够的测试用例来覆盖各种不同的情况和边界条件。

测试用例应该包括典型情况、异常情况和边界情况。

4. 在编写测试用例时,要注重测试覆盖率。

即尽量保证测试用例能够覆盖到代码的每一条执行路径。

仅覆盖代码的一部分可能无法发现潜在的问题。

5. 单元测试应该是可维护的。

测试代码应该具有良好的结构和可读性,以便于其他人理解并维护。

同时,测试代码也需要进行版本控制和维护。

6. 单元测试应该是及时的。

即在代码变更后尽快运行测试,以便及早发现和修复问题。

可以使用持续集成和自动化测试工具来实现自动化和快速的测试。

7. 单元测试的目的是发现问题并提供反馈。

当测试失败时,应
该及时定位问题所在,并进行修复。

同时,还应该学会分析测试失败的原因,以提高测试的质量。

总的来说,单元测试是保证代码质量和稳定性的重要手段。

良好的单元测试需要耐心和细致的编写,但它可以帮助我们及早发现和解决问题,提高代码的可靠性和可维护性。

嵌入式开发单元测试经验分享

嵌入式开发单元测试经验分享

嵌入式开发单元测试经验分享嵌入式开发单元测试是嵌入式系统开发中非常重要的一环,它可以帮助开发人员在早期发现和修复代码中的问题,提高代码质量和系统稳定性。

下面我将从多个角度分享一些关于嵌入式开发单元测试的经验。

首先,选择合适的单元测试框架和工具非常重要。

在嵌入式开发中,常见的单元测试框架包括Unity、CppUTest、Google Test等,选择一个适合自己项目的框架可以提高测试效率和质量。

此外,还可以结合代码覆盖率工具,如gcov、LCOV等,来评估测试的覆盖范围,确保代码的全面测试。

其次,编写可测试的代码也是至关重要的。

在进行嵌入式开发时,尽量避免使用全局变量和静态变量,采用依赖注入等设计模式,可以使代码更易于测试。

另外,遵循单一职责原则,编写小而专注的函数,可以提高代码的可测试性。

另外,编写清晰、可维护的测试用例也是至关重要的。

在编写测试用例时,要确保测试覆盖到代码的各个分支和边界条件,尽量避免冗长的测试用例和重复的测试代码。

同时,要编写清晰的测试断言,确保测试用例的可读性和可维护性。

此外,持续集成和自动化测试也是嵌入式开发单元测试的重要环节。

通过持续集成工具,如Jenkins、Travis CI等,可以将单元测试整合到开发流程中,确保每次代码提交都能触发自动化测试,及时发现问题。

同时,编写自动化测试脚本,可以提高测试效率,减少手工测试的工作量。

最后,及时反馈测试结果也是关键。

在进行单元测试时,要及时收集和分析测试结果,发现问题并及时修复。

同时,要建立完善的测试报告和日志系统,记录测试过程和结果,为后续的代码维护和优化提供参考。

总的来说,嵌入式开发单元测试需要综合考虑框架选择、代码设计、测试用例编写、持续集成和自动化测试等多个方面,只有全面考虑这些因素,才能有效提高测试的质量和效率。

希望以上经验对你有所帮助。

单元测试技巧与实践

单元测试技巧与实践

单元测试技巧与实践一、什么是单元测试单元测试是软件开发中不可或缺的环节。

它指在开发软件时,对软件的每个基本单元进行测试的过程。

所谓基本单元,泛指一个模块、一个函数或一个类等独立的功能模块,这个模块应该是相互独立的,不依赖于其他模块的存在。

单元测试的目的是测试这些基本单元的功能是否正确、效率是否高、对其他模块有无影响等等,以保证软件的质量和稳定性。

二、单元测试的好处单元测试在软件开发过程中扮演了一个非常重要的角色。

它不仅可以检验代码的质量,还可以控制代码的进度。

下面列举几项好处:1、提高代码覆盖率通过单元测试,可以检查代码的覆盖率,这样可以更好地衡量测试的效果,提高测试的覆盖率,以达到更好的测试结果。

2、提高软件质量单元测试可以检测开发过程中的潜在错误,进而加强代码的质量,保证软件的稳定性和可靠性。

3、降低开发成本通过单元测试,可以检查代码中的问题,从而降低代码修改的成本。

这种方式可以在测试前尽量减少代码中的错误,降低测试过程中的成本。

三、单元测试技巧1、单元测试的覆盖率覆盖率是单元测试中非常重要的指标之一。

覆盖率越高,单元测试的效果就越好,所以要尽可能地测试所有的分支和逻辑路径。

在测试时,应该测试到每一个条件分支、循环等各个细节情况,同时应该利用一些测试工具生成覆盖率报告,以便进行分析和优化。

2、数据的利用测试时应该用不同的数据进行测试,同时注意不同的数据输入和输出情况。

这可以帮助我们更好地发现代码中的问题。

常用的方法是使用边界、等价类和决策表等,来帮助我们选择合适的数据,并分析数据的有效性和安全性。

3、处理依赖关系在单元测试时,由于我们需要测试独立的模块,所以可能会产生依赖关系。

这时,我们需要采用模拟对象、桩对象等方法来模拟依赖关系,从而达到测试目的。

4、意外情况的处理在测试过程中,还需要注意处理意外情况。

意外情况包括传递错误的参数、处理空指针等等。

在处理意外情况时,我们可以使用一些框架,如Junit 等,来帮助我们更好地处理意外情况和异常情况。

测试工作经验分享

测试工作经验分享

测试工作经验分享一、测试的基本概念首先,我们需要理解什么是测试。

测试是软件开发生命周期中的一项活动,它确保软件在各种条件下能够按照预期运行。

测试的目标是发现软件中存在的缺陷和错误,并确保软件满足用户的需求和预期。

二、测试的阶段测试通常分为以下五个阶段:●单元测试:单元测试是对软件中的最小可测试单元进行检查和验证。

对于面向对象编程,这最小的单元就是方法,即类中的单个方法。

●集成测试:在单元测试的基础上,将所有模块分组,测试组合后的模块。

这种测试可以发现模块接口之间的错误。

●系统测试:基于软件需求规格说明进行的黑盒测试,以检查整个系统是否符合规定。

●回归测试:当更改或修复软件的一部分时,回归测试确保以前的程序仍然能够正常工作。

●验收测试:用户进行的测试,以确定系统是否准备好被接受并投入使用。

三、测试的方法常见的测试方法包括:1.黑盒测试:这种测试方法不考虑程序的内部逻辑,只关注输入和输出。

例如,一个简单的黑盒测试可能会检查一个函数是否接受两个数字并返回它们的总和。

2.白盒测试:这种测试方法需要对程序的内部逻辑进行考虑。

例如,一个简单的白盒测试可能会检查一个函数中的所有路径是否都已正确处理。

3.灰盒测试:结合了黑盒和白盒测试的特点,既考虑输入和输出,又考虑程序的内部逻辑。

四、如何提高测试的质量●全面理解需求:只有充分理解了用户的需求,我们才能编写出有效的测试用例。

●编写全面的测试用例:确保测试用例覆盖了所有的需求和可能的边界情况。

●定期评审和更新测试用例:随着业务的变化,我们的需求也会发生变化,因此我们需要定期更新和评审我们的测试用例。

●使用自动化工具:自动化工具可以帮助我们更快地执行测试,同时也能减少人为错误。

●持续改进:我们应该根据每次的测试结果进行总结,找出可能的问题和改进的地方。

●良好的团队协作:每个团队成员都应该清楚自己的职责,同时也要有全局观念,这样才能更好地完成测试工作。

●关注细节:任何小错误都可能导致大问题,因此我们需要关注每一个细节。

unit test总结

unit test总结

unit test总结
进行单元测试是软件开发过程中的重要环节,它有助于确保代码的正确性、可靠性和稳定性。

以下是对单元测试的总结:
1.测试覆盖率:单元测试应尽量覆盖代码的各个分支和边界情况,
以确保代码的全面测试。

通过检查测试覆盖率报告,可以评估
测试的质量和效果。

2.边界条件:在设计测试用例时,需要特别关注边界条件。

边界
条件通常是导致错误和异常的主要原因,因此需要确保这些条
件得到充分的测试。

3.隔离性:单元测试应该具有隔离性,即每个测试用例都应该独
立于其他测试用例,不会相互影响。

这样可以确保测试结果的
准确性和可靠性。

4.可重复性:单元测试应该是可重复的,即每次运行测试用例都
应该得到相同的结果。

这可以帮助开发人员识别和解决问题。

5.及早测试:单元测试应该尽早地进行,最好在代码编写的早期
就开始。

这可以帮助尽早发现和解决问题,减少后续开发阶段
的工作量和风险。

6.持续集成:将单元测试与持续集成过程结合起来,可以确保代
码的及时测试和集成。

当每次提交代码时都会运行相应的单元
测试,可以尽早发现问题并防止引入新的错误。

7.错误处理和异常情况:单元测试应该涵盖各种错误处理和异常
情况,以确保代码在异常情况下能够正确地处理和恢复,提高
代码的鲁棒性。

总之,单元测试是软件开发过程中不可或缺的一部分。

通过遵循上述原则和最佳实践,可以提高测试质量、减少错误、加速开发进程,并确保最终交付的软件具备高质量和可靠性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
测试私有函数 读写私有成员 前/后置操作
友元 拷贝
33
与其他工具的比较
与xUnit比较 (效率差异)
与自动测试工具比较 (应用方式不同)
人工测 试效果 自动测 试效果
无特征错误
有特征错误
34
演示
免费工具演示
35
小结
基本功能 (自动生成测试代码) 编写规范的测试代码作为模板,用工具 生成之 可以参考现有产品
21
测试工具开发
基本功能 测试代码编写及生成 几个要点 与其他工具比较
22
测试工具基本功能
自动生成测试代码 开发成本不高 应用效益显著 (节约时间 保持思维延续性)
23
测试代码---产品类
class CMyClass { public: int Add(int i, int j); void Grow(int years)
46
小结
完整性高的用例集就是好用例 程序功能细化、明确化,就是测试用例
47
开发测试过程
开始编写实现代码时才生成测试代码 (函数名/参数等已确定) 完善第一个用例 将程序功能细化,用拷贝/修改的方式建 立其他用例 只调试失败的测试,使用测试代码调试 其实并没有多做什么
48
提高效果效率的方法
如何提高测试效果? 如何提高测试效率?
13
可测性问题 及时解决 人员要求 文档要求 沟通 促进编程 无需额外能力 有无文档均可 自行修正 提高编程效率
由测试实施的话……
成本,在三倍以上? 两个条件: 详细设计文档 足够的具有编码能力的测试员 可能的额外代价: 耽误对系统测试、性能测试的准备工作
14
由开发实施的话……
影响开发进度?(由测试做更慢) 测不出问题?(否,存在完整性问题) 解决完整性问题的方法: 覆盖率检查 测试部门核查 最佳方式:边开发边测试 (无需重复理解 代码,测试促进开发)
4
如何测试?
单元是什么? 错误分类 测试方法分类 测试方法选择 人工动态测试简述
5
单元是什么?
类? (太复杂) 函数?(简单实用)
6
代码错误
性能问题 时间性能 空间性能 功能错误 有特征 无特征
崩溃 异常 超时
行为特征
语法特征
7
测试方法
根据语法特征或行为特征判断错 误,只能发现有特征错误
自动 人工
}
29
工作方式
测试工具负责生成测试代码,接收/处理 测试结果 由开发环境编译测试代码,执行测试工 程即运行测试 测试结果通过进程间通讯技术发送到工 具 测试代码相当单纯
30
要点---运行控制
void RunTest() { CMyClassTester tester; tester.Add_int_int(); } 通过修改代码来控制执行哪个测试
43
功能点与等价类对应关系示例 功能点 等价类
只有左边有空格,返回删除左 左边有空格 边空格后的结果 只有右边有空格,返回删除右 右边有空格 边空格后的结果 两边都有空格,返回删除两边 两边有空格 空格后的结果
两边都没有空格,返回原串
空串,直接返回
两边无空格
空串
空指针,直接返回
空指针
44
设计用例的简单方法
51
白盒覆盖的缺陷
void Func(int* p) 不能发现“忘记处理某些 { 特殊输入”形成的错误 *p = 0; }
特殊输入通常导致崩溃、 异常、超时,正是自动 动态测试的理想猎物
52
三步法
功能测试 (测试想到的输入) 根据未覆盖的逻辑单位,找出遗漏用例 自动生成测试用例,捕捉“忘记处理特 殊输入”形成的错误 难点在第二步,欲找出绝大多数遗漏用 例,需达到100%语句/条件/分支/路 径覆盖。
第九次广州软件测试交流会
单元测试经验分享
王彤
2007-2-3
Copyright ©
内容介绍
从经历谈单元测试的意义 如何测试? 由谁测试? 难于实施的原因及对策 测试工具开发 测试用例设计 提高测试效果效率的方法
3
从经历谈单元测试的意义
做与不做,反差强烈 保证局部代码质量 改良代码整体结构 回归测试降低后期测试、维护升级成本 回归测试适应频繁变化的需求 使开发过程可控
CMyClass(); virtual ~CMyClass();
private: int mAge; //年龄 CString mPhase; //年龄阶段 };
24
测试代码---测试类
class CMyClassTester { CMyClass* pObj; //被测试类的对象指针
CaseBegin(); //用例初始化 CaseEnd(); //用例结束 ClassTest(); //执行本类中的所有测试函数 //各个测试函数加到此后 };
25
测试代码---测试函数
void CMyClassTester::Add_int_int() { //第一个测试用例 {CaseBegin(); //1 int i = 0; //2 int j = 0; //3 int ret = pObj->Add(i, j); //4 TestAssert(ret == 0); //5 CaseEnd(); } //6 }
28
测试代码---成员访问
void CMyClassTester::Grow_int
{ {CaseBegin(); int years = 1; pObj->mAge = 8; pObj->Grow(years); TestAssert( pObj->mAge == 9 ); TestAssert( pObj->mPhase == "儿童" ); CaseEnd(); }
人工设定用例的输入和输出 其他工作 分为有特征错误和无特征错误,后者占 大多数 测试方法有: 人工静态 人工动态 自动静态 自动动态 以人工动态测试为主要方法
11
由谁测试?
开发还是测试?根据成本来决定 成本对比 存在问题及解决办法
12
成本对比
事项 理解代码 边开发边测试 无需额外费时 理解代码 由测试部门测试 理解别人写的代码 难度大,耗时多 累积 需有编程经验,且 三日不写手生 须有详细设计文档 反复沟通 无
19
测试行为分解
行为 特点 对策 自动生成 编写 费时长,会中断、干扰 测试代码 思维
编写 桩代码
费时长,会中断、干扰 思维,可选
尽量避免
使设计明确化和细化, 设计 可能促进思维。复杂方 测试用例 法费时多,干扰思维
使用简单 方法
20
小结
对中断/干扰编程思维的本能抵制? 对策1:自动生成测试代码 对策2:避免编写桩代码 对策3:用简单方法设计测试用例 简单高效,即使不对症,也大有补益
根据人工定义的程序 的行为判断错误
静态
(分析代码)
动态 (执行代码)
需测试用例
8
从简单示例看方法选择
int Add(int a, int b) { return a-b; };
将+写成-
自动方法 (无效) 人工动态方法 (输入两个1,判断输出是否为2 )
9
人工动态测试
设定初始状态 (输入) 执行程序 判断结果是否正确?(输出)
15
测试部门的责任
能否实施,测试部门是关键 推动 培训 工具开发 完整性核查
16
小结
应由开发部门实施 解决完整性问题 (覆盖率检查) (测试部门人工检查) 测试部门是关键 (推动、培训、工具开发、复核)
17
难于实施的原因及对策
难于实施的原因 对策
18
也许是这样……
程序员工作的主题是……解决问题 思维周期 岂干扰、中断思维 学习与实践有何不同? 对策?
31
要点---预期输出的判断
TestAssert(bool result, char* file=__FILE__, int line=__LINE) { if(!result) SendMsgToTool(file,line); } 测试失败时,发送文件名和行号给工具
32
要点---访问私有成员
用例与功能点具有对应关系 程序功能细化、明确化,列成“什么输 入,应产生什么输出”的形式,就是测 试用例
45
输入输出是……
输入 (读取的数据) 参数 成员变量 全局变量 外部媒体 输出 (改写的数据) 返回值 输出参数 成员变量 全局变量 外部媒体 输入要设定初始值,输出要判断结果是 否符合预期 只考虑真正需读/写的数据
41
什么叫一种输入?如…
char* strtrm(char* pstr); 去除字符串两边的空格 “ABCD ” (右边有空格) “AAAA” (两边无空格) NULL (空指针) 就是“等价类”
42
如何编写健壮的程序?
即使不考虑测试…… 编程时各种输入都要考虑 正常输入 (几种正常输入?) 边界输入 (几种边界输入?) 非法输入 (几种非常输入?) 就是“功能点”
36
测试用例设计
简单地设计测试用例
37
测试用例基本要素
设定输入
执行
判断输出
38
有限证明程序正确
假设用例本身 没有错误!
已测试的输入 可以证明正确
?
未测试的输入 可能含有错误
39
完整性问题
? ? 未测试的输入 往往不知道还 有多少……
?
?
40
好的用例
好的用例就是完整性高的用例集合 每一种可能输入都有对应用例 完整地定义了程序的行为 在用例所覆盖的范围内,任何修改引入 的错误都可以发现 (回归测试) 是“每一种输入”,非“每一个输入”
相关文档
最新文档