from unittest import TestCase from pypatterns.creational_patterns import Singleton from tests.utils.dummy import dummy_class_factory class SingletonTestCase(TestCase): """ Unit testing class for the singleton design pattern. """ def setUp(self): """ Initialize testing data. """ self.dummy_class_one = dummy_class_factory(meta_class=Singleton, attributes={}, functions={}) self.dummy_class_two = dummy_class_factory(meta_class=Singleton, attributes={}, functions={}) def test_single(self): """ Test instances from a single singleton class. @raise AssertionError: If the test fails. """ dummy_one = self.dummy_class_one() dummy_two = self.dummy_class_one() self.assertEquals(id(dummy_one), id(dummy_two)) def test_multiple(self): """ Test instances from multiple singleton classes. @raise AssertionError: If the test fails. """ dummy_class_one_instance_one = self.dummy_class_one() dummy_class_one_instance_two = self.dummy_class_one() dummy_class_two_instance_one = self.dummy_class_two() dummy_class_two_instance_two = self.dummy_class_two() self.assertEquals(id(dummy_class_one_instance_one), id(dummy_class_one_instance_two)) self.assertEquals(id(dummy_class_two_instance_one), id(dummy_class_two_instance_two)) self.assertNotEquals(id(dummy_class_one_instance_one), id(dummy_class_two_instance_one)) self.assertNotEquals(id(dummy_class_one_instance_two), id(dummy_class_two_instance_two))