Toaster
Toaster

Reputation: 1971

Python Define Unit Test Classes Together with Code

I am rapid prototyping so for now I would like to write unit tests together with the code I am testing - rather than putting the tests in a separate file. However, I would only like to build the test an invoke them if we run the code in the containing file as main. As follows:

class MyClass:
    def __init(self)__:
        # do init stuff here

    def myclassFunction():
        # do something


if __name__ == '__main__':
    import unittest

    class TestMyClass(unittest.TestCase):
        def test_one(self):
            # test myclassFunction()

    suite = unittest.TestLoader().loadTestsFromTestCase(TestMyClass)
    unittest.TextTestRunner(verbosity=2).run(suite)

This of course doesn't run as unittest is unable to find or make use of the test class, TestMyClass. Is there a way to get this arrangement to work or do I have to pull everything out of the if __name__ == '__main__' scope except the invocation to unittest?

Thanks!

Upvotes: 1

Views: 677

Answers (1)

micgeronimo
micgeronimo

Reputation: 2149

If you move your TestMyClass above of if __name__ == '__main__' you will get exactly what you want: Tests will run only when file executed as main

Something like this

import unittest
class MyClass:
  def __init(self)__:
    # do init stuff here

  def myclassFunction():
    # do something


class TestMyClass(unittest.TestCase):
    def test_one(self):

if __name__ == '__main__':
    unittest.main()

Upvotes: 1

Related Questions