龙卷风:测试父类的正确方法

时间:2019-02-04 16:36:22

标签: python testing subclass tornado

我有其他类继承的基本处理程序。根据基本的RequestHandler测试时,所有测试都可以。但是,当用BaseHandler换行时,我得到tornado.simple_httpclient.HTTPStreamClosedError: Stream closed

龙卷风5.1.1

class BaseHandler(RequestHandler):
    def initialize(self):
        self.logger = self.application.logger
        self.redis = self.application.redis

    def data_received(self, chunk):
        pass

    def write_error(self, status_code, **kwargs):
        self.set_header('Content-Type', 'application/json')

        traceback_exception = (
            traceback
            .format_exception(*kwargs['exc_info'])
        )
        result = {
            'error': {
                'code': status_code,
                'message': self._reason,
                'traceback': traceback_exception,
            }
        }
        logger.error(result, request_body=self.request.arguments)
        self.finish(json.dumps(result))

    @property
    def input_cls(self):
        raise RuntimeError("input_cls must be implemented.")

    @property
    def output_cls(self):
        raise RuntimeError("output_cls must be set.")

    def on_finish(self):
        logger.info(tornado_log(self))
        super().on_finish()

像下面这样的简单包装将返回错误。

class API(BaseHandler):
    route = r'/api'
    async def get(self):
        self.write('OK')

测试用例就是这样设置的。 App()中没有什么花哨的地方,只是一些不会引起任何问题的多余

class TestBaseHandler(AsyncHTTPTestCase):

    def get_app(self):
        return App()

    def test_BaseHandler(self):
        response = self.fetch('/api', raise_error=True)
        self.assertEqual(response.code, 200)

BaseHandler代替龙卷风RequestHandler将返回结果。谷歌搜索错误表明客户端关闭了连接,服务器抛出了该错误。因此,我的包装处理程序类的测试设置一定存在问题,但是我似乎找不到任何解决该问题的资源

编辑:不知道为什么,就像使用def initialise()在请求处理程序中添加属性一样,但似乎没有该请求就会失败。如果我必须在每个处理程序中进行初始化以使测试正常工作,那么如果我在基类中进行初始化就没有帮助。似乎在每个类中都需要执行死代码?

0 个答案:

没有答案