dectest.TestCase
is a drop-in replacement for unittest.TestCase
with
a few added features.
Tests can optionally be marked using the @test
decorator, instead of
prefixing the method name with test
. The following test case class
contains two tests:
from dectest import TestCase, test
class MyTest(TestCase):
def test_foo(self):
pass
@test
def bar(self):
pass
Setup and teardown methods can be marked using the @before
and @after
decorators, respectively. A class can have multiple setup and teardown
methods:
from dectest import TestCase, before, after
class MyTest(TestCase):
@before
def setup_stuff(self):
pass
@before
def setup_more_stuff(self):
pass
@after
def teardown_all_stuff(self):
pass
While the order of execution inside a class is undefined and should not be relied upon, it is guaranteed that setup methods in super-classes are executed before methods in sub-classes, and teardown methods in sub-classes are executed before teardown method in super-classes:
from dectest import TestCase, before, after
class MySuperTest(TestCase):
@before
def super_setup(self):
print("setup first")
@after
def super_teardown(self):
print("teardown second")
class MySubTest(MySuperTest):
@before
def sub_setup(self):
print("setup second")
@after
def sub_teardown(self):
print("teardown first")
dectest.TestCase
has a patch()
method to install a mock using
unittest.mock.patch()
. This patch is removed during test
teardown:
from dectest import TestCase, test
class MyPatchTest(TestCase):
@test
def foo(self):
exit = self.patch("sys.exit") # will be stopped during teardown
# call implementation
exit.assert_called_with(1)