import unittest import io import re from unittest import mock import math import student_X as main #Replace student_X with your filename import sys import io from io import StringIO class CountdownTests(unittest.TestCase): def test_default_case(self): function = main.countdown with mock.patch('sys.stdout', new=io.StringIO()) as fake_stdout: function(0) output = fake_stdout.getvalue().strip() correct = "Blastoff!" in output feedback = "'Blastoff!' is missing or misspelled in your output." self.assertTrue(correct, feedback) lines = output.split("\n") correct = len(lines) == 1 feedback = "Prints multiple lines when the parameter is zero." self.assertTrue(correct, feedback) correct = "Blastoff!" == output feedback = "Prints out extra stuff when the parameter is zero." self.assertTrue(correct, feedback) with mock.patch('sys.stdout', new=io.StringIO()) as fake_stdout: function(10) output = fake_stdout.getvalue().strip() correct = "Blastoff!" in output feedback = "'Blastoff!' is missing or misspelled in your output." self.assertTrue(correct, feedback) lines = output.split("\n") correct = len(lines) == 11 feedback = "Doesn't print the correct number of lines when the parameter is 10." self.assertTrue(correct, feedback) correct = "10\n9\n8\n7\n6\n5\n4\n3\n2\n1\nBlastoff!" == output feedback = "Doesn't print out the correct string when the parameter is 10." self.assertTrue(correct, feedback) with mock.patch('sys.stdout', new=io.StringIO()) as fake_stdout: function(5) output = fake_stdout.getvalue().strip() correct = "5\n4\n3\n2\n1\nBlastoff!" == output feedback = "Doesn't print out the correct string when the parameter is 5." self.assertTrue(correct, feedback) if __name__ == "__main__": tests = CountdownTests() tests.test_default_case()