簡體   English   中英

我的 tornado.testing.AsyncTestCase 測試可以有一個抽象基類嗎?

[英]Can I have an abstract base class for my tornado.testing.AsyncTestCase tests?

是否有可能在龍卷風中定義測試的基類本身不作為測試運行?

假設我有以下最小示例作為基類:

from tornado.testing import AsyncTestCase, gen_test
from tornado.httpclient import HTTPRequest

class AbstractTestCase(AsyncTestCase):
    def set_parameters(self):
        #Set some parameter value here: self.uri = ...
        raise NotImplementedError

    @gen_test
    def test_common_functionality(self):
        req = HTTPRequest(self.uri, method = "GET")
        response = yield self.client.fetch(req, raise_error=False)
        self.assertEqual(200, response.code)

現在,我想制作幾個繼承自此的測試用例,為 self.uri 定義它們自己的值......並進行一些它們自己的特定測試。 像這樣:

class ConcreteTestCase(AbstractTestCase):
    def set_parameters(self):
        self.uri = "www.stackoverflow.com"

    @gen_test
    def test_some_other_thing(self):
        self.assertEqual(2, 1+1)

但是,當我嘗試運行它時,AbstractTestCase 也會自行運行,並出現錯誤(NotImplementedError)。 即使我只嘗試運行繼承測試,也會發生這種情況。

有什么辦法解決這個問題,還是我必須在每個測試用例中復制功能?

命令行界面

python3 -m tornado.testing ConcreteTestCase.ConcreteTestCase

測試主程序

#!/usr/bin/env python3
import unittest
from tornado.testing import main


def all():
    cases = ['ConcreteTestCase.ConcreteTestCase']
    return unittest.defaultTestLoader.loadTestsFromNames(cases)

main()

test/runtests.py就是一個很好的例子。

一種方法是使用多重繼承。 抽象類不需要擴展 AsyncTestCase,只要該類在運行時位於繼承層次結構中即可。

class AbstractTestCase(object):
    def set_parameters(self):
        #Set some parameter value here: self.uri = ...
        raise NotImplementedError

    @gen_test
    def test_common_functionality(self):
        req = HTTPRequest(self.uri, method = "GET")
        response = yield self.client.fetch(req, raise_error=False)
        self.assertEqual(200, response.code)

class ConcreteTestCase(AbstractTestCase, AsyncTestCase):
    def set_parameters(self):
        self.uri = "www.stackoverflow.com"

    @gen_test
    def test_some_other_thing(self):
        self.assertEqual(2, 1+1)

這確實有點奇怪, mypy類型檢查不喜歡它。 但它很簡單而且有效,而且我還沒有找到我喜歡的對mypy友好的替代方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM