# bad user = {"first_name": "John", "last_name": "Doe"} full_name = f"{user['first_name']} {user['last_name']}" # better class User: def __init__(self, first_name, last_name): self.first_name = first_name self.last_name = last_name def full_name(self): return f"{self.first_name} {self.last_name}" user = User(first_name='John', last_name='Doe') print(user.full_name()) # Good test def test_full_name_consists_of_first_name_and_last_name(): # arrange first_name = 'John' last_name = 'Doe' user = User(first_name=first_name, last_name=last_name) # act full_name = user.full_name() # assert assert full_name == "John Doe" test_full_name_consists_of_first_name_and_last_name() class InMemoryUserReposity: def __init__(self): self._users = [] def add(self, user): self._users.append(user) def get_by_first_name(self, first_name): return next( user for user in self._users if user.first_name == first_name ) first_name = 'John' last_name = 'Doe' user = User(first_name=first_name, last_name=last_name) repository = InMemoryUserReposity() repository.add(user) # BAD def test_add(): first_name = 'John' last_name = 'Doe' user = User(first_name=first_name, last_name=last_name) repository = InMemoryUserReposity() repository.add(user) assert user in repository._users def test_get_by_first_name(): first_name = 'John' last_name = 'Doe' user = User(first_name=first_name, last_name=last_name) repository = InMemoryUserReposity() repository._users = [user] user_from_repo = repository.get_by_first_name(first_name) assert user_from_repo == user # GOOD TEST: def test_added_user_can_be_retrieved_by_first_name(): first_name = 'John' last_name = 'Doe' user = User(first_name=first_name, last_name=last_name) repository = InMemoryUserReposity() repository.add(user) assert user == repository.get_by_first_name(user.first_name) import pytest class Player: def __init__(self, username): if len(username) < 1: raise Exception("Username bust not be empty.") self._username = username @property def username(self): return self._username def test_user_with_valid_username(): username = "John" assert Player(username=username).username == username def test_user_error(): username = "" with pytest.raises(Exception): Player(username) test_user_with_valid_username() test_user_error()