How do I concisely implement multiple similar unit tests in the Python unittest framework?

后端 未结 9 1089
予麋鹿
予麋鹿 2020-12-24 15:10

I\'m implementing unit tests for a family of functions that all share a number of invariants. For example, calling the function with two matrices produce a matrix of known s

9条回答
  •  长情又很酷
    2020-12-24 15:24

    Here's my favorite approach to the "family of related tests". I like explicit subclasses of a TestCase that expresses the common features.

    class MyTestF1( unittest.TestCase ):
        theFunction= staticmethod( f1 )
        def setUp(self):
            self.matrix1 = numpy.ones((5,10))
            self.matrix2 = numpy.identity(5)
        def testOutputShape( self ):
            """Output of functions be of a certain shape"""
            output = self.theFunction(self.matrix1, self.matrix2)
            fail_message = "%s produces output of the wrong shape" % (self.theFunction.__name__,)
            self.assertEqual(self.matrix1.shape, output.shape, fail_message)
    
    class TestF2( MyTestF1 ):
        """Includes ALL of TestF1 tests, plus a new test."""
        theFunction= staticmethod( f2 )
        def testUniqueFeature( self ):
             # blah blah blah
             pass
    
    class TestF3( MyTestF1 ):
        """Includes ALL of TestF1 tests with no additional code."""
        theFunction= staticmethod( f3 )
    

    Add a function, add a subclass of MyTestF1. Each subclass of MyTestF1 includes all of the tests in MyTestF1 with no duplicated code of any kind.

    Unique features are handled in an obvious way. New methods are added to the subclass.

    It's completely compatible with unittest.main()

提交回复
热议问题