在站点包中安装Python单元测试有意义吗?
我正在开发我的第一个Python发行包。我的学习曲线 Python的打包似乎有点平稳了,但我仍在努力解决这个问题 一些悬而未决的问题。一个是我是否应该让我的单元测试 与我的代码一起安装 我明白。我想知道的是,我是否应该将它们配置为安装 我见过至少一个流行的软件包,它似乎是故意这样做的 (),而且至少有一个似乎是偶然做的 () 因此,我的(多部分)问题是:在站点包中安装Python单元测试有意义吗?,python,unit-testing,installation,setuptools,software-distribution,Python,Unit Testing,Installation,Setuptools,Software Distribution,我正在开发我的第一个Python发行包。我的学习曲线 Python的打包似乎有点平稳了,但我仍在努力解决这个问题 一些悬而未决的问题。一个是我是否应该让我的单元测试 与我的代码一起安装 我明白。我想知道的是,我是否应该将它们配置为安装 我见过至少一个流行的软件包,它似乎是故意这样做的 (),而且至少有一个似乎是偶然做的 () 因此,我的(多部分)问题是: 将我的包单元测试与我的 包裹代码 如果是,用例是什么?谁会使用它们?为什么?就是谁? 会使用那些不太乐意下载源代码的软件 分发并运行pyth
- 将我的包单元测试与我的 包裹代码
- 如果是,用例是什么?谁会使用它们?为什么?就是谁?
会使用那些不太乐意下载源代码的软件
分发并运行
python setup.py test
- 他们将如何使用已安装的单元测试?如
导入测试;test.run() 像那样
debian
用户认为软件包是从源代码中剥离出来的(我知道你在谈论python,但让我稍微概括一下),并且你的库偶尔会因为系统中的一些奇怪的东西而失败
如果您的测试只确保内部健全,我将跳过附加它们,因为如果没有资源,它们就没有什么价值,因为您永远不会更改库的内部
就我个人而言,我听说有一件事情失败了,因为它被转移到了一些IBM机器上,这些机器有不同的位顺序。我不记得它是否依赖于位操作,或者是否有预先计算并静态缓存的内容。但有时检查是否加载了您认为保存的内容是明智的
编辑:
也许重新措辞会更好。当您觉得可能存在可移植性警告时,我会安装测试。我认为,在不同的系统上部署东西时,检查东西总是很好的。在研究了这个问题之后,直到更有经验的人有一分钟的时间来考虑相反的问题,我的理解是,简单的答案是:“不,不应该安装单元测试,只应该包含在源代码分发中” 在我发现的安装测试的少数情况下,所有测试结果都是意外的,而且比人们想象的更容易在没有注意到的情况下犯错误 下面是它是如何发生的:
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