小编BBe*_*dit的帖子

如何在Py Test中打印到控制台?

我正在尝试使用pytest模块进行测试驱动开发.pytest我写的时候pytest不会到控制台print.

我用print它来运行它...

pytest my_tests.py似乎是说,它应该是默认的工作:http://pytest.org/latest/capture.html

但:

import myapplication as tum

class TestBlogger:

    @classmethod
    def setup_class(self):
        self.user = "alice"
        self.b = tum.Blogger(self.user)
        print "This should be printed, but it won't be!"

    def test_inherit(self):
        assert issubclass(tum.Blogger, tum.Site)
        links = self.b.get_links(posts)
        print len(links)   # This won't print either.
Run Code Online (Sandbox Code Playgroud)

什么都没有打印到我的标准输出控制台(只是正常的进度和多少次测试通过/失败).

我正在测试的脚本包含print:

class Blogger(Site):
    get_links(self, posts):
        print len(posts)   # It won't get printed in the test.
Run Code Online (Sandbox Code Playgroud)

documentation模块中,默认情况下会打印所有内容,这正是我需要的.但是,我希望unittest出于其他原因使用.它似乎是这样的基本功能,也许我很想念它!?

有谁知道如何显示打印语句?

python unit-testing pytest python-2.7

139
推荐指数
7
解决办法
9万
查看次数

如何导入自己的模块进行模拟?(导入错误:没有名为my_module的模块!)

我想对我的类进行单元测试,该类位于另一个名为的文件中client_blogger.py.

我的单元测试文件位于同一目录中.除了我试图模仿我自己的方法之外,我的所有其他单元测试都有效.

## unit_test_client_blogger.py
import mock
import json

from client_blogger import BloggerClient, requests

Class TestProperties():

    @pytest.fixture

    def blog(self):
    return BloggerClient(api_key='123', url='http://example.com')

    @mock.patch('client_blogger._jload')
    @mock.patch('client_blogger._send_request')

    def test_gets_blog_info(self, mock_send, mock_jload):
    """ Get valid blog info from API response. """

    valid_blog_info = 'some valid json api response here'
    parsed_response = json.loads(valid_blog_info)
    correct_blog_id = '7488272653173849119'
    mock_jload.return_value = valid_blog_info

    id = self.blog().get_blog_info(parsed_response)
    assert id == correct_blog_id
Run Code Online (Sandbox Code Playgroud)

这是client_blogger.py文件内容:

# client_blogger.py
import requests, json

class BloggerClient(object):
    """ Client interface for Blogger API. """
    def __init__(self, key, …
Run Code Online (Sandbox Code Playgroud)

python module mocking

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

(练习1.6 K&R)如何验证getchar()!= EOF是0还是1?

我自己开始学习编程(C)作为一种爱好.我正在使用K&R.

 main()
{
int c;
while ((c = getchar()) != EOF)
putchar(c);
}
Run Code Online (Sandbox Code Playgroud)

验证getchar()!= EOF是0还是1

我想我明白发生了什么:

  1. c从键盘分配下一个字符
  2. c检查是否是EOF
  3. c被指定为1或0,具体取决于它是否为EOF.
  4. 字符显示在输出上,或者如果EOF结束程序.

但是,我的解决方案是错误的,所以显然我不明白:

main ()
{
    int c;

    while ((c = getchar()) != EOF)
        printf("%d\n", c);
}
Run Code Online (Sandbox Code Playgroud)

这只是打印字符的值.如果按回车键,也会打印"10".

我以为它会打印c.但是,它是打印字符的值而不是1或0值.

我知道在将其与EOF进行比较后,c被赋予1或0.但我不确定我可以使用什么逻辑来表明这一点.看来我需要以某种方式"退出"显示字符值,而是显示比较值.这是否意味着我需要离开while循环?如果是这样,我不知道如何(这只是猜测).

我怎样才能简单地验证c = 1还是0?

而且,我怎么知道这个?我想,必须有一些基本的东西,我应该从中学习.

main ()
{
    int c;

    while ((c = getchar()) != EOF != 0 != 1)
        putchar(c);
}
Run Code Online (Sandbox Code Playgroud)

我也这样做了,我认为这似乎有效.因为它不输出任何字符,但我不确定这是否是他们正在寻找的解决方案......

c eof getchar

11
推荐指数
2
解决办法
8986
查看次数

如何获取rand()(C++)的源代码?

我是编程新手.

我想知道rand()究竟是什么.

仅搜索会生成有关其用法的示例.但没有人解释函数如何生成随机数的每一步.他们将rand()视为黑盒子.

我想知道rand()正在做什么; 每一步.

是否有资源可以让我看到rand()的确切含义? 这是所有开源的东西不是吗?如果没有消息来源,我会解决这个问题.

我知道它会返回一个随机数,但它是如何生成该数字的?我想看看每一步.

谢谢.

c++ random

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

Scrapy:'str'对象没有属性'iter'

restrict_xpaths为我的scrapy蜘蛛添加了规则,现在它立即失败了:

2015-03-16 15:46:53+0000 [tsr] ERROR: Spider error processing <GET http://www.thestudentroom.co.uk/forumdisplay.php?f=143>
    Traceback (most recent call last):
      File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/twisted/internet/base.py", line 800, in runUntilCurrent
        call.func(*call.args, **call.kw)
      File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/twisted/internet/task.py", line 602, in _tick
        taskObj._oneWorkUnit()
      File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/twisted/internet/task.py", line 479, in _oneWorkUnit
        result = self._iterator.next()
      File "/Library/Python/2.7/site-packages/scrapy/utils/defer.py", line 57, in <genexpr>
        work = (callable(elem, *args, **named) for elem in iterable)
    --- <exception caught here> ---
      File "/Library/Python/2.7/site-packages/scrapy/utils/defer.py", line 96, in iter_errback
        yield next(it)
      File "/Library/Python/2.7/site-packages/scrapy/contrib/spidermiddleware/offsite.py", line 26, in process_spider_output
        for x in result:
      File …
Run Code Online (Sandbox Code Playgroud)

python scrapy scrapy-spider

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

EDX和DX是相同的寄存器吗?

抱歉这个无知的问题,但我对x86感到困惑.

EDX与DX的寄存器基本相同吗?我知道EDX是32位而DX是16位.

如果我将0x1移动到EDX,那么0x1也会在DX中?

x86 assembly

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

为什么(或不是)在Python OOP中使用Getters/Accessors是一种好习惯?

为什么 - 或者为什么不 - 在Python OOP中专门使用getter和setter是一种好习惯?

我的教科书陈述如下:

import random

class Die(object):
    """Simulate a generic die."""
    def __init__(self):
        self.sides = 6
        self.roll()

    def roll(self):
        """Updates the die with a random roll."""
        self.value = 1+random.randrange(self.sides)
        return self.value

    def getValue(self):
        """Return the last value set by roll()."""
        return self.value

def main():
    d1,d2 = Die(),Die()
    for n in range(12):
        print d1.roll(),d2.roll()

main()
Run Code Online (Sandbox Code Playgroud)

getValue()方法(称为getter或accessor)返回值实例变量的值.为什么要写这种功能?为什么不简单地使用实例变量?我们将在本章末尾的常见问题解答中解决这个问题.

但是,本章末尾没有FAQ,因此从未解释为什么在Python OOP中使用getter.

我曾尝试阅读其他地方,但我在任何地方都找不到好的解释.关于SO的大多数答案都是关于Java的,我读过它与Python无关 ......

有人可以帮助我理解为什么使用它们是好的做法?如果没有,为什么不呢?

python oop getter getter-setter python-2.7

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

在OOP中使用函数是不好的做法?

我是编程新手.我最近读过:

您的程序应该具有封装在函数或类方法中的几乎所有功能

这使得我似乎不应该同时拥有这两个函数和方法.我还读到方法应该简短.

好吧,我最近制作了一个从博客下载图像的小程序.我使用了类和OOP方法,因为我需要继承某些东西.

但是,因为方法应该简短并做一件事,我的程序不能做太多.我的问题是,如果我试图使用纯OOP方法,怎么可能避免编写函数?

我的脚本基本遵循以下模式:

class Tumblr(object):

    def __init__(self, user):
        self.user = user

    def get_posts(self):
        """Use tumblr api to return a user's posts."""
        return client['blog']['posts']

    def parse_images(self):
       """Returns images."""
        images = []
        for post in posts:
            if 'image' in post:
                images.append(post['image'])
        return images

    def parse_videos(self):
      """Returns videos."""

def main():
            # this is a function, and thus not OOP?
Run Code Online (Sandbox Code Playgroud)

我还有其他类用于不同的网站API,还有一个Downloader类,它实际上将文件下载到磁盘和正确的目录.问题是,现在我所有的都是这些孤立的类和方法.

我想创建一个main也可以使用其他功能的函数,但是我再次认为这不是正确的OOP.

如何在不编写函数的情况下实际完成工作?(我读过的教科书说,如果我使用方法,不应该在纯OOP中使用函数.)

python oop

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

如何使用 Mock 修补 OS.mkdir?

我正在尝试使用带有 pytest 的 Mock 模块进行单元测试。

我想os.path.isdir()返回False,而os.mkdir()不是运行;我只想验证传递给它的参数是否正确。

我想你只需要看set_path方法

我的应用程序:

import pytumblr, os, sys, prowlpy, json, collections
from urllib2 import urlopen
from time import sleep
from apiclient.discovery import build

class Site(object):
    """A generic site."""
    def __init__(self, user):
        self.user = user

    def set_path(self):
        if os.path.isdir(self.user_dir):            # if user dir already exists
            print "**Directory already exists: ", self.user_dir
        else:
            os.mkdir(self.user_dir)                 # else create user dir
            print "Created Directory: ", self.user_dir

class Tumblr(Site):
    """A tumblr blog."""
    type = "tumblr" …
Run Code Online (Sandbox Code Playgroud)

python unit-testing mocking python-2.7

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

如何强行执行"是/否"决策树?

我想解决一个难题.但我根本不知道它需要什么样的代码.问题是指数问题.

描述:

玩家一次走/跑一步.有时会做出决定; 这是一个是/否的问题.一旦问题得到解答,玩家继续行走直到达到下一个决定/问题.继续此操作,直到覆盖总距离.

问题就是这样.

问题是我希望看到每条可能的路径(很多python列表,如['y','y','n','y','n']).这是我到目前为止编写的代码:(播放器在一个Player()类中,我删除了它,因为它在这里不重要.)

class Solver(object):
    """ Solver object. """

def __init__(self, field):
    self.field = field
    self.dinc = 113
    self.distance = 128

def take_step(self, player):
    """ Takes a step and records players route. """
    # Adds 0 if there is no decision to be made on this step
    # Adds 1 if there is a decision to be made on this step

    player.run(self.dinc)
    if self._is_decision_time(player):
        player.route.append((player.step_id, 1))
    else:
        player.route.append((player.step_id, 0))

def next_decision(self, player):
    """ Accepts a player …
Run Code Online (Sandbox Code Playgroud)

python algorithm

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