[Tutor] TDD: How to test input()?

boB Stepp robertvstepp at gmail.com
Fri Oct 7 21:26:28 EDT 2016


I think I have this figured out, but I want to be certain I am doing
it both correctly and in the preferred way.  I have a need for a
get_input() function and have written my first test for this function
as follows:

class TestGetInput(unittest.TestCase):
    '''Tests for the function get_input().'''

    def setUp(self):
        '''Establish conditions for running these tests.'''

        # Redirect sys.stdin in order to test input functions.
        self.old_stdin = sys.stdin
        sys.stdin = StringIO('5')

    def test_get_input(self):
        '''Test that get_input() returns the expected result.'''

        expected = 5
        draw2x2grid.get_input()
        self.assertEqual(sys.stdin.getvalue(), expected)

    def tearDown(self):
        '''Clear temporary testing variables.'''

        # Return sys.stdin to its normal state.
        sys.stdin = self.old_stdin

When I run my tests I get the promising:

c:\thinkpython2\ch3\ex_3-3>py -m unittest
F...
======================================================================
FAIL: test_get_input (test_draw2x2grid.TestGetInput)
Test that get_input() returns the expected result.
----------------------------------------------------------------------
Traceback (most recent call last):
  File "c:\thinkpython2\ch3\ex_3-3\test_draw2x2grid.py", line 119, in
test_get_input
    self.assertEqual(sys.stdin.getvalue(), expected)
AssertionError: '5' != 5

----------------------------------------------------------------------
Ran 4 tests in 0.000s

FAILED (failures=1)

Currently the get_input() function is:

def get_input():
    '''Get string input from the user and convert it to an integer.  This
    integer is returned to the caller.

    :num_sides:  Number of sides for the displayed grid.'''

    pass

I was bored with the actual exercise 3.3 in the text which is just to
print an ASCII 2x2 grid and then a 3x3 grid, so I am using the TDD
process to created a generalized grid printing program.  So please
excuse the file names "test_draw2x2grid.py" and "draw2x2grid.py".

Let me know if there is a better way to test input() (The heart of
get_input()), or if I have outright misconceptions, etc.

TIA!
-- 
boB


More information about the Tutor mailing list