- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
哇。我今晚发现使用 unittest
模块编写的 Python 单元测试不能很好地与 trace
模块下的覆盖率分析配合使用。这是最简单的单元测试,在 foobar.py
中:
import unittest
class Tester(unittest.TestCase):
def test_true(self):
self.assertTrue(True)
if __name__ == "__main__":
unittest.main()
如果我用 python foobar.py
运行它,我得到这个输出:
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
太棒了。现在我也想执行覆盖测试,所以我用 python -m trace --count -C 再次运行它。 foobar.py
,但现在我明白了:
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
不,Python,这不行 - 你没有运行我的测试!似乎在 trace
的上下文中运行以某种方式破坏了 unittest
的测试检测机制。这是我想出的(疯狂的)解决方案:
import unittest
class Tester(unittest.TestCase):
def test_true(self):
self.assertTrue(True)
class Insane(object):
pass
if __name__ == "__main__":
module = Insane()
for k, v in locals().items():
setattr(module, k, v)
unittest.main(module)
这基本上是一种变通方法,通过伪造顶级模块的副本来具体化抽象的、不可命名的名称。然后我可以将该名称传递给 unittest.main()
以回避 trace
对其产生的任何影响。无需向您展示输出;看起来就像上面的成功示例。
所以,我有两个问题:
这是怎么回事?为什么 trace
搞砸了 unittest
?
有没有更简单和/或更简单的方法来解决这个问题?
最佳答案
一个更简单的解决方法是将模块的名称显式传递给 unittest.main
:
import unittest
class Tester(unittest.TestCase):
def test_true(self):
self.assertTrue(True)
if __name__ == "__main__":
unittest.main(module='foobar')
trace
搞乱了 unittest
中的测试发现,因为 trace
如何加载它正在运行的模块。 trace
读取模块源代码,编译它,并在 __name__
全局设置为 '__main__'
的上下文中执行它。这足以使大多数模块的行为就像它们被称为主模块一样,但实际上并没有改变在 Python 解释器中注册为 __main__
的模块。当 unittest
请求 __main__
模块扫描测试用例时,它实际上得到了从命令行调用的 trace
模块,这当然不会'包含单元测试。
coverage.py
采用不同的方法实际替换 sys.modules
中名为 __main__
的模块。
关于python - unittest.py 与 trace.py 配合不佳 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23691509/
自定义限流注解 先介绍一下 @Retention 和 @Target 这两个元注解 @Retention: 指定注解的生命周期(源码、class文件、运行时),其参考值见类的定义:java.lang.
在 Ubuntu 13.10 中使用 PyCharm Community Edition 和 IdeaVim 时,键盘经常停止接受输入,我必须重新启动 IDE。当我单击不同的文本区域时,光标仍然会移动
我正在开发一个Java项目,我试图让useDelimiter删除除“=”和“,”之间的文本之外的所有内容。例如,在文件的第一行我想保留“ThermostatNight”。 文本文件如下所示: E
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
目录 1、加入 remember-me 2、原理分析 自动登录是我们在软件开发时一个非常常见的功能,例如我们登录 QQ 邮箱: 很多网站我们在登录的时
我是开发 Android 应用程序的菜鸟。我想问一下。我的 PreferenceActivity 如何希望在不返回 MainActivity 并再次转到 PreferenceActivity 的情况下
1. 前言 大家好,我是安果! 我们都知道 Python 可以用来开发桌面应用,一旦功能开发完成,最后打包的可执行文件体积大,并且使用 Python 开发桌面应用周期相对较长 假如想快速开
我正在为命令行应用程序编写一个非常简单的 GUI 工具。它只有 2 个按钮。 连接并退出。 在 applicationDidFinishLaunching 中,我运行以下命令 NSPipe *pipe
我也在 LibGDX forums 上发布了这个问题. 嘿那里!在我的论文中,我正在编写一个 DSL 来描述图片的外观。这些图片将由 libGDX 根据 DSL-Input 绘制。目前,jetbrai
准备 SpringBoot 工程 1.新建 SpringBoot 项目,默认的端口是 8080 ,新建 Controller 和 Mapping @RestControllerpublic cla
我有类似的问题 this one 以下是我使用的: CDH4.4(配置单元 0.10) protobuf-java-.2.4.1.jar elephant-bird-hive-4.6-SNAPSHOT
我想使用 angularjs 和 angular-ui(特别是 ui-select2 功能)实现对选择输入的读/写访问控制。 场景很简单:通过使用 ng-readonly 属性,我可以控制用户是否可以
我是一名优秀的程序员,十分优秀!