import unittest import io import re from unittest import mock import math import copy import inspect import student_X as main #Replace student_X with your filename class DormantVolcanoTests(unittest.TestCase): def test_default_case(self): try: main.ActiveVolcano test = True except: test = False message = "Please include the ActiveVolcano class in here." self.assertTrue(test, message) try: main.DormantVolcano test = True except: test = False message = "No DormantVolcano class." self.assertTrue(test, message) #test docstrings incorrect = "" try: doc = main.DormantVolcano.__doc__ doc = doc.strip() except: doc = "" test = doc != incorrect message = "No docstring for DormantVolcano class." self.assertTrue(test, message) try: doc = main.DormantVolcano.__init__.__doc__ doc = doc.strip() except: doc = "" test = doc != incorrect message = "No docstring for DormantVolcano.__init__ class." self.assertTrue(test, message) try: doc = main.DormantVolcano.__str__.__doc__ doc = doc.strip() except: doc = "" test = doc != incorrect message = "No docstring for DormantVolcano.__str__ class." self.assertTrue(test, message) function = main.DormantVolcano.__str__ mw_latitude = main.GeographicCoordinate('N', 44, 16, 13.8) mw_longitude = main.GeographicCoordinate('W', 71, 18, 11.7) mw_location = main.Location(mw_latitude, mw_longitude) washington = main.Mountain('Mount Washington', 1916.6, mw_location) nearby = main.Mountain('Plymouth Mountain', 670, main.Location(main.GeographicCoordinate('N', 43, 42, 32.04), main.GeographicCoordinate('W', 71, 43, 24.96))) #kilauea = main.Volcano("Kilauea", 1247, main.Location(main.GeographicCoordinate('N', 19, 25, 16), main.GeographicCoordinate('W', 155, 17, 12)), True) loa = main.DormantVolcano("Mauna Loa", 4169, main.Location(main.GeographicCoordinate('N', 19, 28, 46.3), main.GeographicCoordinate('W', 155, 36, 9.6))) #kea = DormantVolcano("Mauna Kea", 4207.3, Location(GeographicCoordinate('N', 19, 49, 14), GeographicCoordinate('W', 155, 28, 5))) inputs = (loa) tested_inputs = inputs #change this if you need to test specific inputs #expected answers correct_inputs = inputs correct_result = "Mauna Loa (4169m tall @(19\N{DEGREE SIGN}28'46.3\"N, 155\N{DEGREE SIGN}36'9.6\"W)) is a dormant volcano" correct_printed = "" #run the test with mock.patch('sys.stdout', new=io.StringIO()) as fake_stdout: if isinstance(inputs, tuple): result = function(*inputs) else: result = function(inputs) printed_output = fake_stdout.getvalue().strip() #this is a cheat. Take this out for later ones! #correct_result = result test = correct_printed == printed_output message = "Shouldn't print anything out." self.assertTrue(test, message) test = result == correct_result message = "Doesn't return the correct string for a DormantVolcano." self.assertTrue(test, message) test = tested_inputs == correct_inputs message = "Modifies the inputs." self.assertTrue(test, message) if __name__ == "__main__": tests = DormantVolcanoTests() tests.test_default_case()