我有一个从PyPI导入模块的应用程序.我想为该应用程序的源代码编写单元测试,但我不想在这些测试中使用PyPI中的模块.
我想完全模拟它(测试机器不会包含那个PyPI模块,所以任何导入都会失败).
目前,每次我尝试加载我想在单元测试中测试的类时,我都会立即收到导入错误.所以我想也许用
try: 
    except ImportError:
并捕获该导入错误,然后使用command_module.run().这看起来非常危险/丑陋,我想知道是否还有另一种方式.
另一个想法是编写一个适配器来包装PyPI模块,但我仍在努力.
如果你知道我可以模拟整个python包,我会非常感激.谢谢.
我正在尝试模拟文件打开,所有示例都显示我需要
@patch('open', create=True) 
但我一直在
Need a valid target to patch. You supplied: 'open'
我知道补丁需要完整的虚线路径open,但我不知道它是什么.事实上,我甚至不确定这是什么问题.
我有一个过程需要我识别不同的机器,我不确定最好的方法是什么.我不想在文本文件或其他东西上保存该ID,但我想在每次需要时从硬件生成它(如果带有ID的文本被删除或者其他东西)
我检查过UUID,看起来还可以,但我不确定.我看了一下uuid.getNode(),但我遇到了2个问题:
一部分说"如果所有尝试获取硬件地址失败,我们选择一个随机的48位数字,其第八位设置为1,如RFC 4122中所推荐",这意味着我可能会在某些系统上获得一些不同的唯一原因 - 有没有办法确定哪个时间失败并产生其他东西?
另一部分说:""硬件地址"表示网络接口的MAC地址,在具有多个网络接口的计算机上,可以返回其中任何一个的MAC地址.",这意味着如果我有2个不同的网络适配器,每次打电话我都可以得到其中任何一个?这对我不好.
如果您有更好的方法来获取机器的唯一ID,我可以每次生成并且不必担心删除它或其他东西 - 我很高兴听到它.我寻找某些东西的所有尝试都失败了.谢谢.
我想打破这段代码:
ex = func(object) if not self.is_object() else foo()
到多行(pep 8)。最好的方法是什么?我想过这个:
ex = func(object) \
    if not self.is_object() \
    else foo()
但这似乎有点难看,也不是很整洁。还有其他方法吗?
编辑:这与将一行分成多行不同,因为这是一个特殊的“表达式 if stmnt else stmnt”,而不仅仅是破坏任何 python 代码。
python ×4
mocking ×2
unit-testing ×2
hardware ×1
mac-address ×1
magicmock ×1
pep8 ×1
python-2.7 ×1
python-mock ×1