summaryrefslogtreecommitdiff
path: root/buildscripts/resmokelib/testing/testcases/pytest.py
blob: fe62b18e15481f7cc846d81dcde69e4f4f61a829 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
"""The unittest.TestCase for Python unittests."""
import os
import unittest

from buildscripts.resmokelib.testing.testcases import interface


class PyTestCase(interface.TestCase):
    """A python test to execute."""

    REGISTERED_NAME = "py_test"

    def __init__(self, logger, py_filename):
        """Initialize PyTestCase."""
        interface.TestCase.__init__(self, logger, "PyTest", py_filename)

    def run_test(self):
        """Execute the test."""
        suite = unittest.defaultTestLoader.loadTestsFromName(self.test_module_name)
        result = unittest.TextTestRunner().run(suite)
        if result.failures:
            msg = "Python test {} failed".format(self.test_name)
            raise self.failureException(msg)

        self.return_code = 0

    def as_command(self):
        """Return execute command."""
        return "python -m unittest {}".format(self.test_module_name)

    @property
    def test_module_name(self):
        """Get the dotted module name from the path."""
        return os.path.splitext(self.test_name)[0].replace(os.sep, ".")