mock(http://mock.readthedocs.org/en/latest/index.html)是python中用于单元测试的一个很好的工具.它可以方便地模拟一个方法或类或dict.But我遇到了一个问题,我找不到一个直接的方式来处理mock.
这是要测试的功能:
def function_to_be_tested(id, responses):
if not id in responses:
print '%s not exist'%pole_id
return
if id in responses.redundantErrorResponses:
print '%s is redundant'%pole_id
return
do_something()
Run Code Online (Sandbox Code Playgroud)
参数响应是一个类似于dict的对象,它具有一些其他属性(例如redundantErrorResponses),除了dict固有特性.现在我想构建一个模拟响应,让它id in responses成为True并id in responses.redundantErrorResponses成为False.这就是我做的:
pole_id = 30
pole_value = 100
pole_dic = {pole_id:pole_value}
mock_responses = MagicMock()
mock_responses.__getitem__.side_effect = lambda k: pole_dic[k]
mock_responses.__iter__.side_effect = iter(pole_dic)
mock_responses.redundantErrorResponses = {}
Run Code Online (Sandbox Code Playgroud)
但是发生了错误:
function_to_be_tested(pole_id, mock_responses)
>>30 not exist
Run Code Online (Sandbox Code Playgroud)
那么如何构建一个MagicMock对象同时可以像dict一样迭代,或者我如何构建一个dict同时支持MagicMock功能(自由添加属性)?
我正在使用pyvisa对符合 SCPI 协议的电源进行编程,如下所示:
power = get_power()
power.write('VOLTage 24.000')
time.sleep(1) # **Must delay**
power.query(u'VOLTage?')
disconnect_power(power)
Run Code Online (Sandbox Code Playgroud)
一切都很好,但是如果我在“写入”和“查询”之间没有等待,就会出现超时错误,就像这样:
引发错误。VisaIOError(ret_value) pyvisa.errors.VisaIOError:VI_ERROR_TMO(-1073807339):操作完成之前超时已过期。
在VISA协议下对此类仪器进行编程时,操作之间存在延迟是否正常?如果没有,通常的方法是什么?或者有类似Event的机制吗?如果是,我如何确定延迟时间?
正如这篇文章所说,在Windows中无人值守安装NumPy有两个明显的选择:
我认为这两种方法都过于复杂.正如我在本文的评论中提到的,如果Python包是特定于平台的,比方说win-32,我想简单地"将所有Python文件和特定于平台的C扩展打包到一个.zip文件或tar.gz文件中,然后解压缩这些文件完成安装",这可以很容易地无人看管.
我可以从Chris Gohlke的网站上获取NumPy的Windows二进制发行版的ZIP格式档案(一个轮子是一个ZIP格式的档案,带有特殊格式的文件名和.whl扩展名),然后只需使用以下命令安装:
pip install numpy-1.9.2+mkl-cp27-none-win32.whl
Run Code Online (Sandbox Code Playgroud)
我在VirtualBox Win7环境中对此进行了测试,并且可以正常运行.
我只想知道这是否是在无人值守的情况下在Windows中安装科学开源扩展包(如scipy,matplotlib等)的常用方法?
根据NumPy 文档:
在大多数用例中,在系统上安装 NumPy 的最佳方法是使用适用于操作系统的可安装二进制包。
但为什么不能像使用一样轻松安装呢pip?
据我了解,NumPy需要根据目标机器编译纯Python以外的东西。这是如何运作的?二进制包中是否包含 C 源文件和 C 编译器?或者它是否包含所有预编译的二进制文件,并且仅根据操作系统选择合适的二进制文件进行安装?