我是靠谱客的博主 和谐网络,最近开发中收集的这篇文章主要介绍python interactive shell_如何为嵌入IPython Interactive Shell的python应用程序编写单元测试...,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我有一个长时间运行的模拟,我需要在模拟的特定时间停下来,然后检索并观察一些信息,然后继续进行模拟。我最近开始使用Test Driven Design方法,不幸的是我不知道如何单元测试放入交互式shell的应用程序。

这是我想要做的事情的基本概念:

# peekaboo.py

from IPython import embed

from IPython.config.loader import Config

PAB_HEADER = 'Hello, my name is PAB. How may I help you?'

PAB_EXIT_MESSAGE = 'Goodbye, sir.'

PAB_PROMPT_IN_TEMPLATE = 'In [PAB \#]: '

PAB_PROMPT_IN2_TEMPLATE = ' .\D.: '

PAB_PROMPT_OUT_TEMPLATE = 'Out [PAB \#]: '

def activate(**vars):

"""

Activate PAB 0.1 by starting an interactive shell and putting

the variables in the scope of the caller into the scope of this

method.

"""

# Add variables from caller to this scope

locals().update(vars)

cfg = None

try:

get_ipython

except NameError:

cfg = Config()

prompt_config = cfg.PromptManager

prompt_config.in_template = PAB_PROMPT_IN_TEMPLATE

prompt_config.in2_template = PAB_PROMPT_IN2_TEMPLATE

prompt_config.out_template = PAB_PROMPT_OUT_TEMPLATE

embed(config=cfg, header=PAB_HEADER, exit_msg=PAB_EXIT_MESSAGE)下面是一个peek_a_boo模块如何使用的例子:

# long_running_app.py

import peek_a_boo

import datetime

import random

start_dt = datetime.datetime(2013,1,1)

datetimes = [start_dt + datetime.timedelta(days=i) for i in range(10)]

dt_of_interest = datetime.datetime(2013, 1, 8)

def long_running_process(dts):

"""

simulate long running process

"""

some_data = {}

for dt in dts:

some_data[dt] = random.random()

if dt.date() == dt_of_interest.date():

peek_a_boo.activate(**locals())

return some_data

if __name__ == '__main__':

data = long_running_process(datetimes)

print data我的第一个倾向是使用模拟和修补嵌入方法,并验证它已被调用了正确的参数,但我想知道是否有人有其他建议?

更新:

所以我使用鼻子进行单元测试,我尝试了以下方法:

# test_peek_a_boo.py

import nose

import mock

class TestPeekABoo(object):

def setup(self):

pass

def teardown(self):

pass

@mock.patch('IPython.embed')

def test_activate(self, mock_embed):

"""

Test that the activate method calls IPython embed with the correct arguments

"""

import peek_a_boo

a = 'Hello'

b = 'World'

peek_a_boo.activate(**locals())

mock_embed.assert_called_once_with(header=peek_a_boo.PAB_HEADER, ...)但是当我运行时:

nosetests test_peek_a_boo.py

该过程挂起。如果我运行:

nosetests test_peek_a_boo.py -s

我可以看到我的流程正在进入交互式Shell。

更新2:

我能够通过在测试类的test_method中导入peek_a_boo来获得上述测试。

这测试嵌入实际上是调用,但我希望能够测试a和b使它成为激活方法的本地范围。

最后

以上就是和谐网络为你收集整理的python interactive shell_如何为嵌入IPython Interactive Shell的python应用程序编写单元测试...的全部内容,希望文章能够帮你解决python interactive shell_如何为嵌入IPython Interactive Shell的python应用程序编写单元测试...所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部