diff --git a/python/tffpy/tests/test_utils.py b/python/tffpy/tests/test_utils.py
new file mode 100644
index 0000000000000000000000000000000000000000..0735a909d81e41e0d169bb15ef68acbbf8e0fa88
--- /dev/null
+++ b/python/tffpy/tests/test_utils.py
@@ -0,0 +1,43 @@
+import unittest
+from unittest.mock import patch
+import tempfile
+from pathlib import Path
+from configparser import ConfigParser
+
+from tffpy.utils import generate_config, get_data_path
+
+
+class TestGenerateConfig(unittest.TestCase):
+    def test_generate_config(self):
+        with patch('tffpy.utils.get_config_file') as mock:
+            mock.return_value = Path(tempfile.mkdtemp()) / 'tffpy.conf'
+            config_file = mock.return_value
+            self.assertFalse(config_file.exists())
+            generate_config()
+            self.assertTrue(config_file.exists())
+
+
+class TestGetDataPath(unittest.TestCase):
+    def test_get_data_path(self):
+        with patch('tffpy.utils.get_config_file') as mock:
+            mock.return_value = Path(tempfile.mkdtemp()) / 'tffpy.conf'
+            config_file = mock.return_value
+
+            self.assertFalse(config_file.exists())
+            with self.assertRaises(Exception):
+                get_data_path()
+
+            generate_config()
+            with self.assertRaises(Exception):
+                get_data_path()
+
+            config = ConfigParser()
+            config.read(config_file)
+            true_data_path = Path(__file__).absolute().parents[3] / 'data'
+            print(true_data_path)
+            self.assertTrue(true_data_path.exists())
+            print('Data path:', str(true_data_path))
+            config.set('DATA', 'data_path', str(true_data_path))
+            config.write(open(config_file, 'w'))
+            tested_data_path = get_data_path()
+            self.assertEqual(tested_data_path, true_data_path)