def setUp(self): #Constants self._image = "IMAGE" self._corners = {front_face: [1, 2, 3, 4], side_face: [5, 6, 7, 8], top_face: [9, 10, 11, 12]} self._face = [7, None, 7, None] self._side = [None, None, 10, 4] self._top = [1, None, None, None] self._red_square = (front_face, 2) self._expected_data = {front_face: self._face, side_face: self._side, top_face: self._top, red_square: self._red_square} #Mocks self._front_face_extractor = MagicMock() self._side_face_extractor = MagicMock() self._top_face_extractor = MagicMock() #Mocks return values self._front_face_extractor.extract_data.return_value = self._face, 2 self._side_face_extractor.extract_data.return_value = self._side, None self._top_face_extractor.extract_data.return_value = self._top, None #Actual operations self._data_extractor = SudocubeDataExtractor() self._data_extractor._init_dependencies = self._fake_init_dependencies(self._data_extractor, self._front_face_extractor, self._side_face_extractor, self._top_face_extractor) self._data = self._data_extractor.extract_data_from_image_with_corner_info(self._image, self._corners)
class TestSudocubeDataExtractor(unittest.TestCase): def setUp(self): #Constants self._image = "IMAGE" self._corners = {front_face: [1, 2, 3, 4], side_face: [5, 6, 7, 8], top_face: [9, 10, 11, 12]} self._face = [7, None, 7, None] self._side = [None, None, 10, 4] self._top = [1, None, None, None] self._red_square = (front_face, 2) self._expected_data = {front_face: self._face, side_face: self._side, top_face: self._top, red_square: self._red_square} #Mocks self._front_face_extractor = MagicMock() self._side_face_extractor = MagicMock() self._top_face_extractor = MagicMock() #Mocks return values self._front_face_extractor.extract_data.return_value = self._face, 2 self._side_face_extractor.extract_data.return_value = self._side, None self._top_face_extractor.extract_data.return_value = self._top, None #Actual operations self._data_extractor = SudocubeDataExtractor() self._data_extractor._init_dependencies = self._fake_init_dependencies(self._data_extractor, self._front_face_extractor, self._side_face_extractor, self._top_face_extractor) self._data = self._data_extractor.extract_data_from_image_with_corner_info(self._image, self._corners) def test_should_tell_front_extractor_to_extract_data(self): self._front_face_extractor.extract_data.assert_called_once_with(self._image, self._corners[front_face]) def test_should_tell_side_extractor_to_extract_data(self): self._side_face_extractor.extract_data.assert_called_once_with(self._image, self._corners[side_face]) def test_should_tell_top_extractor_to_extract_data(self): self._top_face_extractor.extract_data.assert_called_once_with(self._image, self._corners[top_face]) def test_should_return_data_as_dictionnary_of_data_and_red_square_position(self): self.assertEqual(self._expected_data, self._data) #Monkey patch to mock dependencies def _fake_init_dependencies(self, data_extractor, front_extractor, side_extractor, top_extractor): data_extractor._front_extractor = front_extractor data_extractor._side_extractor = side_extractor data_extractor._top_extractor = top_extractor