Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.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_Installation_Setuptools_Software Distribution - Fatal编程技术网

在站点包中安装Python单元测试有意义吗?

在站点包中安装Python单元测试有意义吗?,python,unit-testing,installation,setuptools,software-distribution,Python,Unit Testing,Installation,Setuptools,Software Distribution,我正在开发我的第一个Python发行包。我的学习曲线 Python的打包似乎有点平稳了,但我仍在努力解决这个问题 一些悬而未决的问题。一个是我是否应该让我的单元测试 与我的代码一起安装 我明白。我想知道的是,我是否应该将它们配置为安装 我见过至少一个流行的软件包,它似乎是故意这样做的 (),而且至少有一个似乎是偶然做的 () 因此,我的(多部分)问题是: 将我的包单元测试与我的 包裹代码 如果是,用例是什么?谁会使用它们?为什么?就是谁? 会使用那些不太乐意下载源代码的软件 分发并运行pyth

我正在开发我的第一个Python发行包。我的学习曲线 Python的打包似乎有点平稳了,但我仍在努力解决这个问题 一些悬而未决的问题。一个是我是否应该让我的单元测试 与我的代码一起安装

我明白。我想知道的是,我是否应该将它们配置为安装

我见过至少一个流行的软件包,它似乎是故意这样做的 (),而且至少有一个似乎是偶然做的 ()

因此,我的(多部分)问题是:

  • 将我的包单元测试与我的 包裹代码

  • 如果是,用例是什么?谁会使用它们?为什么?就是谁? 会使用那些不太乐意下载源代码的软件 分发并运行
    python setup.py test

  • 他们将如何使用已安装的单元测试?如
    导入测试;test.run()
    像那样


尽管我不是专家,但我愿意分享我的观点

如果我认为某些东西可能会因外部原因而失败,我总是将测试放在代码旁边。无论是位顺序、奇怪的时区、字符编码、24位整数还是任何你可能遇到并进行测试的奇怪事物

谁不愿意下载源代码并运行测试? 也许一些
debian
用户认为软件包是从源代码中剥离出来的(我知道你在谈论python,但让我稍微概括一下),并且你的库偶尔会因为系统中的一些奇怪的东西而失败

如果您的测试只确保内部健全,我将跳过附加它们,因为如果没有资源,它们就没有什么价值,因为您永远不会更改库的内部

就我个人而言,我听说有一件事情失败了,因为它被转移到了一些IBM机器上,这些机器有不同的位顺序。我不记得它是否依赖于位操作,或者是否有预先计算并静态缓存的内容。但有时检查是否加载了您认为保存的内容是明智的

编辑:
也许重新措辞会更好。当您觉得可能存在可移植性警告时,我会安装测试。我认为,在不同的系统上部署东西时,检查东西总是很好的。

在研究了这个问题之后,直到更有经验的人有一分钟的时间来考虑相反的问题,我的理解是,简单的答案是:“不,不应该安装单元测试,只应该包含在源代码分发中”

在我发现的安装测试的少数情况下,所有测试结果都是意外的,而且比人们想象的更容易在没有注意到的情况下犯错误

下面是它是如何发生的:

  • setup.py中使用了
    packages=find_packages()
    参数,因此可以在不必显式列出的情况下找到包
  • test
    文件夹被制作成一个包(通过添加
    \uuuu init\uuuu.py
    ),这样测试可以引用它们使用相对命名(例如,
    from..import pkg.mod
    )测试的模块
  • setuptools
    test
    作为一个单独的包与项目中的其他包一起安装。注意,这意味着您可以在python解释器中执行
    import test
    ,并且它可以正常工作,几乎肯定不是您想要的,特别是因为许多其他人将该名称用作他们的测试目录:)

  • 修复方法是使用设置:
    packages=find_packages(exclude=['test'])
    来阻止安装测试目录。

    在我看来,正确的答案是否定的,但您会发现安装测试的许多发行版。测试不应安装,但应包含在源代码分发中。在我看来,在理想情况下,测试已安装的软件包应该是由软件包管理器(pip)执行的任务,
    站点软件包
    目录不应该被测试源污染

    我最近研究了这个主题,从各种来源收集了信息,并找到了几种不同的方法来构造包含库源和测试的发行版的目录/包层次结构。这些结构中的大多数似乎已经过时,它们的发明是为了解决当时旧发行系统不完整的功能集。不幸的是,许多在线资源(较旧的博客帖子/文档)仍在宣传过时的方法,因此很容易通过在线搜索找到过时的发行版操作指南/教程

    让我们假设您有一个名为“my_lib”的库,并且希望构建发行版的源代码。我将展示两种流行且似乎过时的方法来构建您的发行版,第三种方法是我发现最通用的。第三种方法也可能已经过时,但这是我所知道的最好的一种,在发布此答案的时候

    方法#1 安装测试(有意或无意)的发行版通常使用此方法

    层次结构

    +-my_lib
    |+-\\\\\\\\\.py
    |+-source1.py
    |+-source2.py
    |+-测试
    |+-\\\\\\\\\.py
    |+-test_1.py
    |+-test_2.py
    +-setup.py
    
    方法#2 未安装测试,但应通过
    MANIFEST.in
    文件将其包含在源发行版中

    层次结构

    +-my_lib
    |+-\\\\\\\\\.py
    |+-source1.py
    |+-source2.py
    +-测验
    |+-\\\\\\\\\.py
    |+-test_1.py
    |+-test_2.py
    +-setup.py
    
    方法#3(我更喜欢这个。) 这与方法#2非常相似,但有一点扭曲(即
    src
    dir)

    层次结构

    +-src
    |+-my_lib
    |+-\\\\\\\\\.py
    |+-source1.py
    |+-source2.py
    +-测验
    |+-\\\\\\\\\.py
    |+-test_1.py
    |+-t