diff --git a/.gitignore b/.gitignore
index 785c09b535592bba74f802f6d97c3e97f0e557f8..c2098da4dae9a32993e264c6bd5dbf8109b165a7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,11 @@
 # Ignore compiled files
 *.pyc
 
+# Ignore test files
+/.coverage
+/tests/.pytest_cache/
+/tests/sample_data/
+/tests/reference_results/
+
 # Ignore package build directory
 /toarstats.egg-info/
diff --git a/tests/.gitignore b/tests/.gitignore
deleted file mode 100644
index be54f2bcb3b5f6e21ecf8a1d092f19810915bc58..0000000000000000000000000000000000000000
--- a/tests/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Ignore sample and reference data
-/sample_data/
-/reference_results/
diff --git a/tests/create_data_metadata.py b/tests/create_data_metadata.py
new file mode 100644
index 0000000000000000000000000000000000000000..e05782d3022ca7daf920db69678724424159c9c1
--- /dev/null
+++ b/tests/create_data_metadata.py
@@ -0,0 +1,57 @@
+from collections import namedtuple
+from configparser import ConfigParser
+from pathlib import Path
+
+import numpy as np
+import pandas as pd
+import pytest
+
+
+def create_sample_data(sample_data_dir):
+    sample_data_dir.mkdir(exist_ok=True)
+    datetime_index = pd.date_range(start="2011-04-17 09:00", periods=100000,
+                                   freq="H")
+    values = np.random.default_rng().uniform(13.4, 61.7, len(datetime_index))
+    values[np.random.default_rng().choice(values.size,
+                                          size=int(0.085*values.size),
+                                          replace=False)] = np.nan
+    pd.Series(values, datetime_index).dropna().to_csv(
+        Path(sample_data_dir, "sample_data.csv"), header=False
+    )
+    Path(sample_data_dir, "sample_metadata.cfg").write_text(
+        "[METADATA]\n"
+        "station_lat: 50.906389\n"
+        "station_lon: 6.403889\n"
+        "station_climatic_zone: 3\n",
+        encoding="utf-8"
+    )
+
+
+@pytest.fixture
+def sample_data():
+    sample_data_file = Path(
+        Path(__file__).resolve().parent, "sample_data/sample_data.csv"
+    )
+    if not sample_data_file.is_file():
+        create_sample_data(sample_data_file.parent)
+    return pd.read_csv(
+        sample_data_file,
+        header=None, index_col=0, parse_dates=True
+    )
+
+
+@pytest.fixture
+def sample_metadata():
+    sample_metadata_file = Path(
+        Path(__file__).resolve().parent, "sample_data/sample_metadata.cfg"
+    )
+    if not sample_metadata_file.is_file():
+        create_sample_data(sample_metadata_file.parent)
+    parser = ConfigParser()
+    with open(sample_metadata_file, encoding="utf-8") as file:
+        parser.read_file(file)
+    Metadata = namedtuple("Metadata", ["station_lat", "station_lon",
+                                       "station_climatic_zone"])
+    return Metadata(parser.getfloat("METADATA", "station_lat"),
+                    parser.getfloat("METADATA", "station_lon"),
+                    parser.getint("METADATA", "station_climatic_zone"))
diff --git a/tests/test_metrics/test_metrics.py b/tests/test_metrics/test_metrics.py
index e5020b5f997d16b4573a59b139cadb18338da6c5..3cb78c7258275891c221298162f8739affecc242 100644
--- a/tests/test_metrics/test_metrics.py
+++ b/tests/test_metrics/test_metrics.py
@@ -1,36 +1,15 @@
 import ast
-from collections import namedtuple
-from configparser import ConfigParser
 from pathlib import Path
 
 import numpy as np
 import pandas as pd
 import pytest
 
+from tests.create_data_metadata import sample_data, sample_metadata
 from toarstats.metrics.interface import calculate_statistics
 from toarstats.metrics.stats_utils import STATS_LIST
 
 
-def create_sample_data(sample_data_dir):
-    sample_data_dir.mkdir(exist_ok=True)
-    datetime_index = pd.date_range(start="2011-04-17 09:00", periods=100000,
-                                   freq="H")
-    values = np.random.default_rng().uniform(13.4, 61.7, len(datetime_index))
-    values[np.random.default_rng().choice(values.size,
-                                          size=int(0.085*values.size),
-                                          replace=False)] = np.nan
-    pd.Series(values, datetime_index).dropna().to_csv(
-        Path(sample_data_dir, "sample_data.csv"), header=False
-    )
-    Path(sample_data_dir, "sample_metadata.cfg").write_text(
-        "[METADATA]\n"
-        "station_lat: 50.906389\n"
-        "station_lon: 6.403889\n"
-        "station_climatic_zone: 3\n",
-        encoding="utf-8"
-    )
-
-
 def get_all_statistics():
     return set(STATS_LIST)
 
@@ -50,33 +29,6 @@ def get_all_samplings():
     return samplings
 
 
-@pytest.fixture
-def sample_data():
-    sample_data_file = Path(
-        Path(__file__).resolve().parent, "sample_data/sample_data.csv"
-    )
-    if not sample_data_file.is_file():
-        create_sample_data(sample_data_file.parent)
-    return pd.read_csv(
-        sample_data_file,
-        header=None, index_col=0, parse_dates=True
-    )
-
-
-@pytest.fixture
-def sample_metadata():
-    parser = ConfigParser()
-    with open(Path(Path(__file__).resolve().parent,
-                   "sample_data/sample_metadata.cfg"),
-              encoding="utf-8") as file:
-        parser.read_file(file)
-    Metadata = namedtuple("Metadata", ["station_lat", "station_lon",
-                                       "station_climatic_zone"])
-    return Metadata(parser.getfloat("METADATA", "station_lat"),
-                    parser.getfloat("METADATA", "station_lon"),
-                    parser.getint("METADATA", "station_climatic_zone"))
-
-
 def test_all_statistics_and_samplings_from_old_versions_implemented():
     old_statistics = set()
     old_samplings = set()