class TestDeck(unittest.TestCase): def setUp(self): self.deck = Deck() self.fake_cards = [ FakeCard(), FakeCard(), FakeCard() ] self.deck.cards = self.fake_cards[:] def test_shuffle_randomizes_card_order(self): # arrange sorted_cards = [] for i in xrange(10000): sorted_cards.append(FakeCard()) self.deck.cards = sorted_cards[:] # act self.deck.shuffle() # assert self.assertEqual(len(self.deck.cards), len(sorted_cards)) self.assertNotEqual(self.deck.cards, sorted_cards) def test_shuffle_flips_cards(self): # arrange Deck.SHUFFLE_FLIP_PROBABILITY = 1.0 # act self.deck.shuffle() # assert for card in self.fake_cards: self.assertTrue(card.flip_called) def test_nextCard_returns_cards_in_correct_order(self): # arrange next_cards = [] # act for i in range(len(self.fake_cards)): next_cards.append(self.deck.nextCard()) # assert self.assertEqual(next_cards, self.fake_cards) def test_nextCard_throws_exception_when_deck_empty(self): # arrange try: # act for i in range(len(self.fake_cards) + 1): self.deck.nextCard() except DeckEmptyException: pass