使用扭曲的延迟测试

Ale*_*lex 5 python twisted trial

我一直在努力用 deferred 和 deferred 来测试扭曲的代码。

我想,我有一个简单的测试应该会失败。

根据我对 Twisted 的测试工具 Trial 的理解,我应该能够返回一个延迟,当它完成时测试将完成。

这是我的代码花絮,也许有人可以提供帮助。

import unittest, time

from twisted.internet import reactor, defer

class MyTest(unittest.TestCase):

def test_simple_deferred(self):

    print "\nStarting Test"

    my_deferred = defer.Deferred()

    def print_time():
      print time.time()
      self.assertTrue(False)

    my_deferred.addCallback(print_time)

    reactor.callLater(3, my_deferred.callback)

    print time.time()

    return my_deferred
Run Code Online (Sandbox Code Playgroud)

在此先感谢,我已经看了很多例子,但我想我已经达到了我已经研究这个太久的地步。

Sin*_*ion 5

你有两个问题。

首先,要获得特殊的延迟处理,您的测试用例需要继承自twisted.trial.unittest.TestCase,而不是 Python 标准库版本。

最后,您没有reactor.callLater正确调用,或者更确切地说,您没有为Deferred.callback();提供正确的参数。你需要给 deferred 一个。如果你不在乎它是什么,给它一个None. 同样,回调需要采用该参数;你可以放心地忽略它。

from twisted.trial import unittest
#^^^^^^^^^^^^^^^^^
import time

from twisted.internet import defer
from twisted.internet import reactor

class MyTest(unittest.TestCase):

    def test_simple_deferred(self):

        print "\nStarting Test"

        my_deferred = defer.Deferred()

        def print_time(dont_care):
        #              ^^^^^^^^^
            print time.time()
            self.assertTrue(False)

        my_deferred.addCallback(print_time)

        reactor.callLater(3, my_deferred.callback, None)
        #                                        ^^^^^^    
        print time.time()

        return my_deferred
Run Code Online (Sandbox Code Playgroud)