Exercises
Testing
3 tasks. Write the code, press Check, and the page runs it against a real Python interpreter.
Exercise 1Passed
TestAdd has no tests yet. Add two that check add(2, 3) is 5 and add(-1, 1) is 0.
Python
import unittest
import io
def add(a, b):
return a + b
class TestAdd(unittest.TestCase):
pass
suite = unittest.TestLoader().loadTestsFromTestCase(TestAdd)
result = unittest.TextTestRunner(stream=io.StringIO()).run(suite)
print("ran", result.testsRun, "failures", len(result.failures))Subclass unittest.TestCase; methods must start with test.
import unittest
import io
def add(a, b):
return a + b
class TestAdd(unittest.TestCase):
def test_adds(self):
self.assertEqual(add(2, 3), 5)
def test_negatives(self):
self.assertEqual(add(-1, 1), 0)
suite = unittest.TestLoader().loadTestsFromTestCase(TestAdd)
result = unittest.TextTestRunner(stream=io.StringIO()).run(suite)
print("ran", result.testsRun, "failures", len(result.failures))Exercise 2Passed
Add a test that parse_age rejects text, using assertRaises.
Python
import unittest
import io
def parse_age(text):
return int(text)
class TestParse(unittest.TestCase):
def test_reads_a_number(self):
self.assertEqual(parse_age("30"), 30)
suite = unittest.TestLoader().loadTestsFromTestCase(TestParse)
result = unittest.TextTestRunner(stream=io.StringIO()).run(suite)
print("ran", result.testsRun, "failures", len(result.failures))with self.assertRaises(ValueError): ...
import unittest
import io
def parse_age(text):
return int(text)
class TestParse(unittest.TestCase):
def test_reads_a_number(self):
self.assertEqual(parse_age("30"), 30)
def test_rejects_text(self):
with self.assertRaises(ValueError):
parse_age("thirty")
suite = unittest.TestLoader().loadTestsFromTestCase(TestParse)
result = unittest.TextTestRunner(stream=io.StringIO()).run(suite)
print("ran", result.testsRun, "failures", len(result.failures))Exercise 3Passed
This test fails because the implementation is wrong. Fix the code, not the test.
Python
import unittest
import io
def add(a, b):
return a * b
class TestAdd(unittest.TestCase):
def test_adds(self):
self.assertEqual(add(2, 3), 5)
suite = unittest.TestLoader().loadTestsFromTestCase(TestAdd)
result = unittest.TextTestRunner(stream=io.StringIO()).run(suite)
print("failures", len(result.failures))Read what the test expects, then make add do it.
import unittest
import io
def add(a, b):
return a + b
class TestAdd(unittest.TestCase):
def test_adds(self):
self.assertEqual(add(2, 3), 5)
suite = unittest.TestLoader().loadTestsFromTestCase(TestAdd)
result = unittest.TextTestRunner(stream=io.StringIO()).run(suite)
print("failures", len(result.failures))