小编Tzu*_*rEl的帖子

在python中模拟整个模块

我有一个从PyPI导入模块的应用程序.我想为该应用程序的源代码编写单元测试,但我不想在这些测试中使用PyPI中的模块.
我想完全模拟它(测试机器不会包含那个PyPI模块,所以任何导入都会失败).

目前,每次我尝试加载我想在单元测试中测试的类时,我都会立即收到导入错误.所以我想也许用

try: 
    except ImportError:
Run Code Online (Sandbox Code Playgroud)

并捕获该导入错误,然后使用command_module.run().这看起来非常危险/丑陋,我想知道是否还有另一种方式.

另一个想法是编写一个适配器来包装PyPI模块,但我仍在努力.

如果你知道我可以模拟整个python包,我会非常感激.谢谢.

python unit-testing python-module mocking python-mock

8
推荐指数
2
解决办法
3967
查看次数

模拟文件在python中打开

我正在尝试模拟文件打开,所有示例都显示我需要

@patch('open', create=True) 
Run Code Online (Sandbox Code Playgroud)

但我一直在

Need a valid target to patch. You supplied: 'open'
Run Code Online (Sandbox Code Playgroud)

我知道补丁需要完整的虚线路径open,但我不知道它是什么.事实上,我甚至不确定这是什么问题.

python unit-testing mocking magicmock

6
推荐指数
2
解决办法
1万
查看次数

使用Python获取唯一的硬件ID

我有一个过程需要我识别不同的机器,我不确定最好的方法是什么.我不想在文本文件或其他东西上保存该ID,但我想在每次需要时从硬件生成它(如果带有ID的文本被删除或者其他东西)

我检查过UUID,看起来还可以,但我不确定.我看了一下uuid.getNode(),但我遇到了2个问题:

  1. 一部分说"如果所有尝试获取硬件地址失败,我们选择一个随机的48位数字,其第八位设置为1,如RFC 4122中所推荐",这意味着我可能会在某些系统上获得一些不同的唯一原因 - 有没有办法确定哪个时间失败并产生其他东西?

  2. 另一部分说:""硬件地址"表示网络接口的MAC地址,在具有多个网络接口的计算机上,可以返回其中任何一个的MAC地址.",这意味着如果我有2个不同的网络适配器,每次打电话我都可以得到其中任何一个?这对我不好.

如果您有更好的方法来获取机器的唯一ID,我可以每次生成并且不必担心删除它或其他东西 - 我很高兴听到它.我寻找某些东西的所有尝试都失败了.谢谢.

python hardware mac-address uniqueidentifier

4
推荐指数
2
解决办法
1万
查看次数

将一行“if else”语句分成多行

我想打破这段代码:

ex = func(object) if not self.is_object() else foo()
Run Code Online (Sandbox Code Playgroud)

到多行(pep 8)。最好的方法是什么?我想过这个:

ex = func(object) \
    if not self.is_object() \
    else foo()
Run Code Online (Sandbox Code Playgroud)

但这似乎有点难看,也不是很整洁。还有其他方法吗?

编辑:这与将一行分成多行不同,因为这是一个特殊的“表达式 if stmnt else stmnt”,而不仅仅是破坏任何 python 代码。

python pep8 python-2.7

3
推荐指数
1
解决办法
7261
查看次数