Last Updated : 12 Jun, 2019
Testing is a critical part of development as there is no compiler to analyze the code before Python executes it. Given a program that has a method whose output goes to
standard Output (sys.stdout). This almost always means that it emits text to the screen. One likes to write a test for the code to prove that, given the proper input, the proper output is displayed. Using the
unittest.mock module’spatch()
function, it’s pretty simple to mock out
sys.stdoutfor just a single test, and put it back again, without messy temporary variables or leaking mocked-out state between test cases.
Code #1 : Example Python3 1==
def urlprint(protocol, host, domain):
url = '{}://{}.{}'.format(protocol, host, domain)
print(url)
The built-in
print
function, by default, sends output to
sys.stdout
. In order to test that output is actually getting there, it is to be mocked out using a stand-in object, and then make assertions about what happened. Using the
unittest.mock
module’s
patch()
method makes it convenient to replace objects only within the context of a running test, returning things to their original state immediately after the test is complete.
Code #2 : Test code for the above code Python3 1==
from io import StringIO
from unittest import TestCase
from unittest.mock import patch
import mymodule
class TestURLPrint(TestCase):
def test_url_gets_to_stdout(self):
protocol = 'http'
host = 'www'
domain = 'example.com'
expected_url = '{}://{}.{}\n'.format(protocol, host, domain)
with patch('sys.stdout', new = StringIO()) as fake_out:
mymodule.urlprint(protocol, host, domain)
self.assertEqual(fake_out.getvalue(), expected_url)
urlprint()
function takes three arguments, and the test starts by setting up dummy arguments for each one. The expected_url variable is set to a string containing the expected output.unittest.mock.patch()
function is used as a context manager to replace the value of sys.stdout
with a StringIO object as a substitute.RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4