diff --git a/testMaze.py b/testMaze.py
new file mode 100644
index 0000000000000000000000000000000000000000..da1c135eb80caf949fac65e68d7a24d51b5fbb2f
--- /dev/null
+++ b/testMaze.py
@@ -0,0 +1,92 @@
+import unittest
+from unittest.mock import Mock
+
+import pygame
+
+from maze import Maze
+
+
+class TestMaze(unittest.TestCase):
+    def test_num_rows(self):
+        initial_level = [
+            [0, 0, 0],
+            [0, 0, 0],
+            [0, 0, 0]
+        ]
+        maze = Maze(initial_level)
+        self.assertEqual(maze.num_rows(), 3)
+
+    def test_num_columns(self):
+        initial_level = [
+            [0, 0, 0, 0],
+            [0, 0, 0, 0],
+            [0, 0, 0, 0]
+        ]
+        maze = Maze(initial_level)
+        self.assertEqual(maze.num_columns(), 4)
+
+    def test_getitem(self):
+        initial_level = [
+            [0, 0, 0],
+            [0, 0, 0],
+            [0, 0, 0]
+        ]
+        maze = Maze(initial_level)
+        self.assertEqual(maze[0], [0, 0, 0])
+        self.assertEqual(maze[1], [0, 0, 0])
+        self.assertEqual(maze[2], [0, 0, 0])
+
+    def test_set_level(self):
+        initial_level = [
+            [0, 0, 0],
+            [0, 0, 0],
+            [0, 0, 0]
+        ]
+        maze = Maze(initial_level)
+        new_level = [
+            [1, 1, 1],
+            [1, 1, 1],
+            [1, 1, 1]
+        ]
+        maze.set_level(new_level)
+        self.assertEqual(maze.current_level, new_level)
+
+    def test_update_screen_size(self):
+        initial_level = [
+            [0, 0, 0],
+            [0, 0, 0],
+            [0, 0, 0]
+        ]
+        maze = Maze(initial_level)
+        pygame.display.set_mode((800, 600))
+        maze.update_screen_size()
+        self.assertEqual(pygame.display.get_surface().get_size(), (3 * 32, 3 * 32))
+
+    def test_draw(self):
+        initial_level = [
+            [0, 0, 0],
+            [0, 1, 0],
+            [0, 0, 0]
+        ]
+        maze = Maze(initial_level)
+        tiles = {0: Mock(), 1: Mock()}
+        maze.tiles = tiles
+
+        maze.draw()
+
+        expected_calls = [
+            ((tiles[0], (0, 0)),),
+            ((tiles[0], (32, 0)),),
+            ((tiles[0], (64, 0)),),
+            ((tiles[0], (0, 32)),),
+            ((tiles[1], (32, 32)),),
+            ((tiles[0], (64, 32)),),
+            ((tiles[0], (0, 64)),),
+            ((tiles[0], (32, 64)),),
+            ((tiles[0], (64, 64)),),
+        ]
+        self.assertEqual(self.mock_screen.blit.call_args_list, expected_calls)
+
+
+if __name__ == "__main__":
+    unittest.main()