Skip to content

Instantly share code, notes, and snippets.

@mverteuil
Created April 19, 2017 15:40
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mverteuil/bb7303862d0abeb378917bc27f7d71e5 to your computer and use it in GitHub Desktop.
Save mverteuil/bb7303862d0abeb378917bc27f7d71e5 to your computer and use it in GitHub Desktop.
BDD Style Tests
from decimal import Decimal as D
from numbers import Number
from django.test import TestCase
class Adder(object):
def __init__(self, addend, augend):
if not (isinstance(addend, Number) or isinstance(augend, Number)):
raise TypeError('Adder requires both addend and augend to be Numbers.')
self._addend = addend
self._augend = augend
def calculate(self):
return self._addend + self._augend
class AdderTests(TestCase):
def setUp(self):
self.addend = 1
self.augend = 2
def test_add_integer_values(self):
""" Should produce an integer with value equal to 3. """
adder = Adder(int(self.addend), int(self.augend))
result = adder.calculate()
self.assertEquals(result, 3)
self.assertIsInstance(result, int)
def test_add_floating_point_values(self):
""" Should produce a float with a value equal to 3.0. """
adder = Adder(float(self.addend), float(self.augend))
result = adder.calculate()
self.assertEquals(result, 3.0)
self.assertIsInstance(result, float)
def test_add_complex_values(self):
""" Should produce a complex with a value equal to 3+0j. """
adder = Adder(complex(self.addend), complex(self.augend))
result = adder.calculate()
self.assertEquals(result, complex(3, 0))
self.assertIsInstance(result, complex)
def test_add_decimal_values(self):
""" Should produce a decimal with a value equal to D('3.0'). """
adder = Adder(D(self.addend), D(self.augend))
result = adder.calculate()
self.assertEquals(result, D('3.0'))
self.assertIsInstance(result, D)
def test_invalid_arguments(self):
""" Should raise a TypeError when supplying non-numeric arguments. """
with self.assertRaises(TypeError):
Adder(None, None)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment