扭曲的审判在两次测试之间悬而未决

2024-10-05 14:24:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我对twisted还是个新手,我正试图用试用测试框架编写一些单元测试。我的测试按预期运行并通过,但由于某些原因,测试在测试之间悬而未决。每次测试后,我都要点击CTRL+C来让它进入下一个测试。我猜我的某些配置不正确,或者我没有调用一些应该告诉试用版测试已经完成的方法。在

以下是被测班级:

from twisted.internet import reactor, defer
import threading
import time


class SomeClass:
   def doSomething(self):
      return self.asyncMethod()

   def asyncMethod(self):
       d = defer.Deferred()
       t = SomeThread(d)
       t.start()
       return d


class SomeThread(threading.Thread):
    def __init__(self, d):
        super(SomeThread, self).__init__()
        self.d = d

    def run(self):
        time.sleep(2) # pretend to do something
        retVal = 123
        self.d.callback(retVal)

下面是单元测试类:

^{pr2}$

命令行输出如下所示:

me$ trial test.py 
test
  SomeTest
    testOne ... ^C                                                           [OK]
    testTwo ... ^C                                                           [OK]

-------------------------------------------------------------------------------
Ran 2 tests in 8.499s

PASSED (successes=2)

Tags: testimportselfreturntimeinitdeftwisted
1条回答
网友
1楼 · 发布于 2024-10-05 14:24:16

我想你的问题和你的线程有关。Twisted不是线程安全的,如果需要与线程接口,应该让reactor使用deferToThreadcallInThreadcallFromThread来处理事情。 请参见here,了解如何使用Twisted实现线程安全。在

相关问题 更多 >