Unit Testing

In this notebook we’ll demonstrate some basic unit testing for models.

We build on the standard python unittest libarary, which is documented here. Other testing suites are available, with their own advantages, but this is the most basic, so we’ll use it for our demonstration.

Unit testing us usually done not in the ipython notebook, but in a standalone python file. Tests for this demo are found in the accompanying file testsite.py:

import pysd
import unittest

class TestTeacupModel(unittest.TestCase):
    """ Test Import functionality """
    
    @classmethod
    def setUpClass(cls):
        cls.model = pysd.read_vensim('../../models/Teacup/Teacup.mdl')

    def test_initialization(self):
        self.assertEqual(self.model['teacup_temperature'], 180.0)

    def test_heatflow_calc(self):
        self.assertEqual(self.model.components.heat_loss_to_room(), 11.0)
        
    def test_output(self):
        self.assertAlmostEqual(self.model.run()['Teacup Temperature'].iloc[-1], 
                               75, delta=1)

if __name__ == '__main__':
    unittest.main()
%run testsuite.py
...
----------------------------------------------------------------------
Ran 3 tests in 0.126s

OK