#!/usr/bin/python3 # -*- coding: utf-8 -*- """ Testing std in/out """ import sys # The better/easier way (can be done with std input or output) # (output also mentioned in previous io section) orig_stdin = sys.stdin sys.stdin = open("thing.txt", "r") line = input() print(line) sys.stdin = orig_stdin print("fixed now") # We covered doing this with stdout previously, # and this is just a reminder. # A more complicated alternative # using unittest.mock.patch def urlprint(protocol: str, host: str, domain: str) -> None: url = "{}://{}.{}".format(protocol, host, domain) print(url) import io import unittest import unittest.mock class TestURLPrint(unittest.TestCase): def test_url_gets_to_stdout(self) -> None: protocol = "http" host = "www" domain = "example.com" expected_url = "{}://{}.{}\n".format(protocol, host, domain) with unittest.mock.patch("sys.stdout", new=io.StringIO()) as fake_out: urlprint(protocol, host, domain) self.assertEqual(fake_out.getvalue(), expected_url) if __name__ == "__main__": unittest.main(verbosity=2)