mercredi 22 janvier 2020

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

Is it possible to have base classes that define tests in tornado that are themselves not run as tests?

Let's say I have the following minimal example as a base class:

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)

Now, I would like to make several test cases that inherit from this, define their own value for self.uri...and have some specific tests of their own. Like this:

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)

However, when I try to run this, the AbstractTestCase is also run on its own, giving an error (the NotImplementedError). This happens even when I only try to run the inheriting tests.

Is there any way around this issue, or do I have to duplicate the functionality in each test case?

Aucun commentaire:

Enregistrer un commentaire