Django doctests in views.py

前端 未结 7 2084
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-17 08:31

The Django 1.4 documentation on tests states:

For a given Django application, the test runner looks for doctests in two places:

  • The

7条回答
  •  既然无缘
    2020-12-17 09:28

    You can do this by adding/editing the suite() function in tests.py which defines what tests will be run by the django test runner.

    import unittest
    import doctest
    from project import views
    
    def suite():
        suite = unittest.TestSuite()
        suite.addTest(doctest.DocTestSuite(views))
        return suite
    

    Then just run your tests as usual and you should see your doctests in views.py run.

    $ python manage.py test project
    

    This is described in more detail in the django testing documentation

    When you run your tests, the default behavior of the test utility is to find all the test cases (that is, subclasses of unittest.TestCase) in models.py and tests.py, automatically build a test suite out of those test cases, and run that suite.

    There is a second way to define the test suite for a module: if you define a function called suite() in either models.py or tests.py, the Django test runner will use that function to construct the test suite for that module. This follows the suggested organization for unit tests. See the Python documentation for more details on how to construct a complex test suite.

    However, keep in mind that constructing your own test suite means that the django test runner will not automatically run any tests you have in tests.py. You'll have to add these into your suite manually, for example

    import unittest
    import doctest
    from project import views
    
    class FooTestCase(unittest.TestCase):
        def testFoo(self):
            self.assertEquals('foo', 'bar')
    
    def suite():
        suite = unittest.TestSuite()
        suite.addTest(doctest.DocTestSuite(views))
        suite.addTest(unittest.TestLoader().loadTestsFromTestCase(FooTestCase))
        return suite
    

提交回复
热议问题