小编len*_*ehx的帖子

如何让MagicMock表现得像个字典?

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功能(自由添加属性)?

python mocking

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

VISA协议下操作之间等待一段时间正常吗?

我正在使用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的机制吗?如果是,我如何确定延迟时间?

python visa

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

在Windows中无人参与安装具有特定于平台的扩展的Python包的常用方法是什么?

正如这篇文章所说,在Windows中无人值守安装NumPy有两个明显的选择:

  1. 编译numpy并自己制作一个msi安装程序
  2. 使用AutoIt

我认为这两种方法都过于复杂.正如我在本文的评论中提到,如果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等)的常用方法?

python numpy matplotlib package-managers scipy

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

为什么要通过二进制包安装 NumPy?

根据NumPy 文档

在大多数用例中,在系统上安装 NumPy 的最佳方法是使用适用于操作系统的可安装二进制包。

但为什么不能像使用一样轻松安装呢pip

据我了解,NumPy需要根据目标机器编译纯Python以外的东西。这是如何运作的?二进制包中是否包含 C 源文件和 C 编译器?或者它是否包含所有预编译的二进制文件,并且仅根据操作系统选择合适的二进制文件进行安装?

python numpy pip

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

标签 统计

python ×4

numpy ×2

matplotlib ×1

mocking ×1

package-managers ×1

pip ×1

scipy ×1

visa ×1