Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 单元测试打开文件的脚本_Python_Unit Testing - Fatal编程技术网

Python 单元测试打开文件的脚本

Python 单元测试打开文件的脚本,python,unit-testing,Python,Unit Testing,我编写了一个脚本,可以打开一个文件,读取内容,进行一些操作和计算,并将它们存储在集合和字典中 我如何为这样的事情编写单元测试?我的问题是: 我要测试文件是否打开了吗 该文件很大(它是unix字典文件)。我如何对计算进行单元测试?我真的需要手动计算所有内容并测试结果是否正确吗?我觉得这违背了单元测试的全部目的。我没有通过stdin接受任何输入 您还没有解释计算是什么,但我想您的程序也应该能够处理大文件的一个子集。如果是这种情况,进行单元测试,打开一个小文件,进行计算并生成一些结果,您可以验证这些结

我编写了一个脚本,可以打开一个文件,读取内容,进行一些操作和计算,并将它们存储在集合和字典中

我如何为这样的事情编写单元测试?我的问题是:

  • 我要测试文件是否打开了吗
  • 该文件很大(它是unix字典文件)。我如何对计算进行单元测试?我真的需要手动计算所有内容并测试结果是否正确吗?我觉得这违背了单元测试的全部目的。我没有通过stdin接受任何输入

  • 您还没有解释计算是什么,但我想您的程序也应该能够处理大文件的一个子集。如果是这种情况,进行单元测试,打开一个小文件,进行计算并生成一些结果,您可以验证这些结果是否正确

    这不是单元测试的目的

  • 您的文件不代表一个单元,因此不您不测试该文件或使用该文件
  • 单元测试应该测试处理a)文件处理b)计算的函数/方法的每个方法
  • 单元测试超过被测单元的代码行的情况并不少见
  • 单元测试方法(不完整且不符合书本定义):

    • 简约/原子-你可以将你的单位分解为最基本/最简单的单位;单元通常是可调用的(方法、函数、可调用对象)
    • 关注点分离——在每一次测试中,你只测试一件事情;如果要测试单个单元的不同条件,可以编写不同的测试
    • 决定论——你给这个单元一些要处理的东西,事先知道它的结果应该是什么
    • 如果您的测试单元需要特定的环境,您可以创建夹具/测试设置/模型
    • 单元测试(根据经验)非常快!如果速度慢,检查你是否违反了上面的另一点
    • 如果您需要测试与上面的内容冲突的内容,那么您可能已经朝着集成测试迈出了下一步
    • 您可以将单元测试框架用于非单元测试,但不要因为使用了单元测试框架就称之为单元测试
    这个家伙(Gary Bernhardt)对测试和单元测试的含义有一些有趣的了解

    更新了解一些澄清:

    “1.是否要测试文件是否已打开?”

    你可以这么做,但那“单位”是什么呢?请记住,测试只有两种解决方案:通过和失败。如果您的测试失败,它应该(理想情况下必须)只有一个原因:您的单元(=功能)糟透了!但在这种情况下,您的测试可能会失败,因为: *该文件不存在 *锁上了 *腐败 *没有剩下文件句柄 *内存不足(大文件) *月相 等等

    那么,一个失败(或通过)的“单元”测试会对您的单元产生什么影响呢?您不会单独测试单元,而是使用它测试整个周围环境。这更像是一个系统测试! 如果您想测试nontheless以成功打开文件,您至少应该模拟一个文件

    “2…我如何对计算进行单元测试?我真的必须手动计算所有内容并测试结果是否正确吗?”

    不,您将为角落和常规案例编写测试,并对照已处理的案例检查预期结果。所需的测试量取决于计算的复杂性和规则的例外情况

    e、 g:


    我希望我说得更清楚

    您应该将代码重构为可进行单元测试的代码。在我的头顶上,会说:

  • 将文件打开的功能放在一个单独的单元中。使新单元接收文件名,并返回内容流
  • 让你的单元接收一个流并读取它,而不是打开一个文件并读取它
  • 为主(计算)单元编写单元测试。您将需要模拟流,例如来自字典的流。编写几个测试用例,每次为您的单元提供不同的流,并确保您的单元为每个输入计算正确的数据
  • 让您的代码覆盖率尽可能接近100%。使用鼻子测试覆盖范围
  • 最后,为“流提供者”编写一个测试。向它提供几个文件(将它们存储在测试文件夹中),并确保流提供程序正确读取它们
  • 让第二个单元测试覆盖率尽可能接近100%
  • 现在,而且只有现在,提交代码

  • “什么是单元测试”这一问题回答得很好,但这不是我的问题。我已经阅读了很多次背后的理论。我在问一个实际的答案放松点。。现在你回答了,并提供了相关的背景信息,因此答案是正确的。
    def test_negative_factor(self):
       assert result 
    
    def test_discontinuity(self):
       assert raise exception if x == undefined_value