小编Phi*_*rke的帖子

如何在使用inlineCallbacks的试验测试用例中使用assertRaises

我正在试图弄清楚如何编写一个试验测试用例,该测试用例会引发异常.

目前我有两种简单的方法来测试(成功和失败).每个方法都返回一个已经回调或错误返回的延迟.测试成功方法很好.在测试失败方法时,我希望能够断言引发了异常(使用assertRaises).

但是测试用例失败了,我得到了:

twisted.trial.unittest.FailTest: ConnectionRefusedError not raised (<Deferred at 0x920e28c current result: <twisted.python.failure.Failure <class 'twisted.internet.error.ConnectionRefusedError'>>> returned)

代码如下:

from twisted.trial.unittest import TestCase
from twisted.internet.defer import inlineCallbacks, succeed, fail
from twisted.internet.error import ConnectionRefusedError

class MyObject:
    def success(self):
        return succeed(True)

    def failure(self):
        return fail(ConnectionRefusedError())


class TestErrBack(TestCase):
    def setUp(self):
        self.o = MyObject()

    @inlineCallbacks
    def test_success(self):
        result = yield self.o.success()
        self.assertTrue(result)

    @inlineCallbacks
    def test_failure(self):
        # this test case is failing !
        yield self.assertRaises(ConnectionRefusedError, self.o.failure)

我在test_failure中使用正确的方法吗?我可以使用try ...来调用self.o.failure,但我不认为这种方法与使用assertRaises一样好.

python twisted trial

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

如何使用Python中的方法引用方法名称?

假设我使用该方法定义了以下类foo:

class MyClass:
    def foo(self):
        print "My name is %s" % __name__
Run Code Online (Sandbox Code Playgroud)

现在,当我打电话时,foo()我希望/希望看到这个打印出来

My name is foo  
Run Code Online (Sandbox Code Playgroud)

但是我得到了

My name is __main__  
Run Code Online (Sandbox Code Playgroud)

如果我将类定义放入一个名为FooBarI get 的模块中

My name is FooBar  
Run Code Online (Sandbox Code Playgroud)

但是,如果我这样做

m = MyClass()
print m.foo.__name__
Run Code Online (Sandbox Code Playgroud)

我得到了我想要的东西

My name is foo
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙解释为什么__name__引用模块而不是方法名称?有一个简单的方法来获取方法名称?

非常感谢

python methods introspection

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

如何在没有python解释的情况下捕获二进制字符串中的所有字符

以下是我重现问题的方法:

创建一个名为"temp.log"的日志文件并将此行粘贴到其中

DEBUG: packetReceived '\x61\x62\x63'

我想有一个脚本,它将从日志文件中读取行并解码二进制字符串部分('\ x61\x62\x63').对于解码,我使用struct,所以:

struct.unpack('BBB', '\x61\x62\x63')

应该给我

(97, 98, 99)

这是我正在使用的脚本

import re
import struct
import sys

f = open(sys.argv[1], 'r')
for line in f:
    print line
    packet = re.compile(r"packetReceived \'(.*)\'").search(line).group(1)

    # packet is the string r'\x61\x62\x63'
    assert(len(packet), 12)

    # this works ok (returns (97, 98, 99))
    struct.unpack('BBB', '\x61\x62\x63')

    # this fails because packet is interpreted as r'\\x61\\x62\x63'
    struct.unpack('BBB', packet)

我使用temp.log作为脚本的参数来运行脚本.

希望这些评论突出我的问题.如何将变量包解释为'\ x61\x62\x63'?

ASIDE:在第一次编辑这个问题时,我假设读取文件中的行与此相同:line ="DEBUG:packetReceived'\ x61\x62\x63'",这使得数据包=='abc'

但它实际上与此相同(使用rawstring)line = r"DEBUG:packetReceived'\ x61\x62\x63'"

python regex struct

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

标签 统计

python ×3

introspection ×1

methods ×1

regex ×1

struct ×1

trial ×1

twisted ×1