我编写了一个脚本,它打开一个文件,读取内容并进行一些操作和计算,并将它们存储在集合和字典中。
我该如何为这样的事情编写单元测试?我的问题具体是:
- 我会测试文件是否打开?
- 文件很大(这是unix字典文件)。我如何对计算进行单元测试?我真的必须手动计算所有内容并测试结果是否正确吗?我有一种感觉,这违背了单元测试的全部目的。我不通过标准输入获取任何输入。
这不是单元测试的目的!
- 您的文件不代表一个单元,所以不,您不测试该文件或使用该文件!
- 您的单元测试应该测试处理 a) 文件处理 b) 计算的函数/方法的每一个方法
- 您的单元测试超出被测单元的代码行的情况并不罕见。
单元测试意味着(不完整且不是书本定义):
- 简约/原子-您将单元分解为尽可能最基本/简单的单元;一个单元通常是一个可调用的(方法、函数、可调用对象)
- 关注点分离——在每次测试中只测试一件事;如果你想测试单个单元的不同条件,你可以编写不同的测试
- 决定论——你给单位一些东西来处理,事先知道它的结果应该是什么
- 如果您的被测单元需要特定的环境,您可以创建一个固定装置/测试设置/模型
- 单元测试(根据经验)非常快!如果速度很慢,请检查您是否违反了上面的另一点
- 如果您需要测试违反上面某些内容的内容,您可能已经在集成测试测试中迈出了下一步
- 您可以使用单元测试框架而不是单元测试,但不要仅仅因为使用单元测试框架就将其称为单元测试
这家伙(加里·伯恩哈特)有一些有趣的东西实际例子 https://www.youtube.com/watch?v=RAxiiRPHS9k测试和单元测试的含义。
Update一些澄清:
“1.我会测试文件是否打开吗?”
好吧,你可以这样做,但是“单位”是什么?请记住,测试只有两种解决方案:通过和失败。如果你的测试失败,它应该(理想情况下必须)只有一个原因:你的单元(=功能)很糟糕!但在这种情况下,您的测试可能会失败,因为:
* 文件不存在
* 被锁住了
* 已损坏
* 没有剩余文件句柄
* 内存不足(大文件)
* 月相
等等。
那么,失败(或通过)的“单元”测试会对您的单元产生什么影响呢?您不是单独测试您的设备,而是测试它的整个周围环境。这更像是一个系统测试!
如果您想测试是否成功打开文件,您至少应该模拟一个文件。
“2 ...我如何对计算进行单元测试?我真的必须手动计算所有内容并测试结果是否正确吗?”
不。您将为极端情况和常规情况编写测试,并根据处理后的结果检查预期结果。所需的测试数量取决于计算的复杂性和规则的例外情况。
e.g.:
def test_negative_factor(self):
assert result
def test_discontinuity(self):
assert raise exception if x == undefined_value
我希望我能让自己更清楚!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)