单元测试是什么?为什么要做单元测试?

背锅侠 一个有个性的订阅号


1.单元测试是什么

单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确,通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为1。

长按图片识别二维码

入群-学习-合作-投稿

加小石阿微信 带你上高速

2.单元测试的好处

1,单元测试不但会使你的工作完成得更轻松。而且会令你的设计会变得更好,甚至大大减少你花在调试上面的时间 

2,提高代码质量 

3,减少bug,快速定位bug 

4,放心地修改、重构 

5,显得专业(玩笑话)

3.写单元测试要注意什么

1,不能只测试一条正确执行路径,要考虑到所有可能的情况 

2,要确保所有测试都能够通过,避免间接损害 

3,如果一个函数复杂到无法单测,那就说明模块的抽象有问题 

4,配置不是单元测试的难点,难点是mock(后文讲),做单元测试需要伪造被测函数用到的大部分函数间接损害:在整个系统中,当某一部分加入了新特性,或者修复了一个bug之后,给系统的其他(与前面可能是互不相关的)部分引入了一个新的bug(或者损害)。如果无视这种损害并且继续开发的话,那么将可能带来一个很危险的问题,最后可能会导致整个系统崩溃,并且没人能够修复。

4.为什么写单元测试(为什么会拒绝单元测试)?

编写单元测试太花时间了?考虑下面问题:

1,对于所编写的代码,你在调试上面画了多少时间? 

2,对于以前你自认为正确的代码,而实际上这些代码却存在重大的bug,你画了多少时间在重新确认这些代码上面? 

3,对于一个别人报告的bug,你花了多少时间才找出导致这个bug的源码位置? 

对于那些没有使用单元测试的程序员而言,上面这些问题所耗费的时间的递增速度是很快的,而且随着项目深入,递增速度会变得更快;而另一方面,适当的单元测试却可以很大程度地减少这些时间,从而为你腾出足够的时间来编写所有的单元测试——甚至可能还有剩余的空闲时间。

a.运行测试的时间太长?

一般合适的测试是不会让这种情况发生的。 

有些真的会花很长时间的,可以把耗时的测试和其他测试分开。

b.不清楚代码的行为?

如果实在不清楚代码的行为,那么现在应该也不是应该编码的时候。

c.代码都能编译通过啊?

ok,你的代码语法正确,应该也是可以运行的。但是代码的行为和你的预期是一样的么?

public void addItem(Object itemObject){
    List myList = new List;
    myList.add(itemObject);
    myList.add(itemObject);
    ...
}

本文部分来源于网络如有侵权请联系删除

背锅侠Tester

长按关注下方二维码领取资料

linux

jmeter

python

appscan

mysql

爬虫

sele

面试

WE WISH YOU HAPPY

NEW YEAR

2019

留言 在看 分享 你看着整儿

### 单元测试的主要测试对象和内容 单元测试的核心目标是验证软件设计中最小单位的正确性和可靠性。其主要测试对象为模块,这些模块可以是一个函数、一个类的方法,或者具有明确功能定义、性能定义和接口定义的独立组件[^2]。 #### 1. 测试对象 单元测试的对象通常是软件系统中的最小可测试部分,例如: - **函数或方法**:这是最常见的单元测试对象,尤其是对于面向过程的编程语言。 - **类**:在面向对象编程中,类及其方法也是单元测试的重要对象。 - **组件**:如果某个组件能够独立完成特定功能且与其他部分有清晰的边界,也可以作为单元测试的目标。 #### 2. 测试范围 单元测试的范围主要包括以下几个方面: - **功能正确性**:确保模块按照预期执行任务,返回正确的结果。 - **边界条件**:测试输入值处于边界时的行为是否符合预期。 - **异常处理**:验证模块在面对异常输入或错误情况时的反应是否合理。 - **性能指标**:检查模块是否满足预定的性能要求。 - **代码覆盖率**:通过白盒测试技术(如语句覆盖、分支覆盖等),确保尽可能多的代码路径被测试到[^1]。 ```python # 示例:对一个简单函数进行单元测试 def add(a, b): return a + b # 单元测试代码 import unittest class TestAddFunction(unittest.TestCase): def test_add_positive_numbers(self): self.assertEqual(add(2, 3), 5) # 功能正确性测试 def test_add_negative_numbers(self): self.assertEqual(add(-1, -1), -2) # 边界条件测试 def test_add_mixed_numbers(self): self.assertEqual(add(-1, 2), 1) # 异常处理测试 if __name__ == "__main__": unittest.main() ``` 上述代码展示了如何针对一个简单的 `add` 函数编写单元测试用例,涵盖了功能正确性、边界条件和异常处理等内容。 #### 3. 白盒测试技术的应用 在单元测试中,白盒测试技术尤为重要,因为它关注程序内部逻辑和代码覆盖率。常用的白盒测试技术包括语句覆盖、分支覆盖、条件覆盖、路径覆盖等[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值