Skip to content

Instantly share code, notes, and snippets.

@okanyenigun
Last active October 20, 2022 20:38
Show Gist options
  • Save okanyenigun/5fbe676f1346467fcd8d418e15a87901 to your computer and use it in GitHub Desktop.
Save okanyenigun/5fbe676f1346467fcd8d418e15a87901 to your computer and use it in GitHub Desktop.
pytest unittest example 2
import pytest
from unittest.mock import Mock
from unittest_examples import Flight, CustomerDb
@pytest.fixture
def app():
plane = Flight(5, 10)
plane.add_passenger("Cristiano Ronaldo")
plane.add_passenger("Ten Hag")
plane.add_passenger("Harry Maguire")
d = CustomerDb()
yield plane, d
d.close()
def test_adding_a_passenger(app):
app[0].add_passenger("Luke Shaw")
assert app[0].number_of_passengers() == 4
def test_plane_contains_booked_passenger(app):
app[0].add_passenger("Bruno Fernandes")
assert "Bruno Fernandes" in app[0].get_passenger_list()
def test_overbooking_not_allowed(app):
for _ in range(2):
app[0].add_passenger("Harry Maguire")
with pytest.raises(OverflowError):
app[0].add_passenger("Harry Maguire")
def test_total_gross_wo_mock(app):
gross = app[0].calculate_total_gross(app[1])
assert gross == 25
def test_total_gross_mocking_constant(app):
d = app[1]
d.get_customer_membership = Mock(return_value=1)
gross = app[0].calculate_total_gross(d)
assert gross == 30
def test_total_gross_mocking_w_se(app):
"""with side effect"""
def mock_members(name: str) -> int:
if name == "Cristiano Ronaldo":
return 2
elif name == "Ten Haag":
return 0
return 1
d = app[1]
d.get_customer_membership = Mock(side_effect=mock_members)
gross = app[0].calculate_total_gross(d)
assert gross == 25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment