diff --git a/nerval/evaluate.py b/nerval/evaluate.py
index 7feec7b9053efbcd474cc41c0e6448775b4891a4..5afe7cc66ba841267444aa8d03a716e51c73071e 100644
--- a/nerval/evaluate.py
+++ b/nerval/evaluate.py
@@ -374,7 +374,7 @@ def run_multiple(file_csv: Path, folder: Path, threshold: int, verbose: bool):
                 recall += scores["All"]["R"]
                 f1 += scores["All"]["F1"]
             else:
-                raise Exception(f"No file found for files {annot}, {predict}")
+                raise Exception(f"No file found for files {row[0]}, {row[1]}")
         if count:
             logger.info("Average score on all corpus")
             table = PrettyTable()
diff --git a/pyproject.toml b/pyproject.toml
index 28ef1df7b3dfaa71262a763639661a37c952be22..24be6f8c255151161b9d3aa3901c88ae3a01b3a8 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -35,4 +35,6 @@ select = [
     "ARG",
     # flake8-use-pathlib
     "PTH",
+    # flake8-pytest-style
+    "PT",
 ]
diff --git a/tests/conftest.py b/tests/conftest.py
index 5381d25d7f1c3865bf722c845ddb99c2294ccc94..61b73008682e5ec8321c6130da8cf4c50f4f2616 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -5,46 +5,46 @@ import pytest
 FIXTURES = Path(__file__).parent / "fixtures"
 
 
-@pytest.fixture
+@pytest.fixture()
 def fake_annot_bio():
     return FIXTURES / "test_annot.bio"
 
 
-@pytest.fixture
+@pytest.fixture()
 def fake_predict_bio():
     return FIXTURES / "test_predict.bio"
 
 
-@pytest.fixture
+@pytest.fixture()
 def empty_bio():
     return FIXTURES / "test_empty.bio"
 
 
-@pytest.fixture
+@pytest.fixture()
 def bad_bio():
     return FIXTURES / "test_bad.bio"
 
 
-@pytest.fixture
+@pytest.fixture()
 def bioeslu_bio():
     return FIXTURES / "bioeslu.bio"
 
 
-@pytest.fixture
+@pytest.fixture()
 def end_of_file_bio():
     return FIXTURES / "end_of_file.bio"
 
 
-@pytest.fixture
+@pytest.fixture()
 def nested_bio():
     return FIXTURES / "test_nested.bio"
 
 
-@pytest.fixture
+@pytest.fixture()
 def folder_bio():
-    return Path("test_folder")
+    return FIXTURES
 
 
 @pytest.fixture()
 def csv_file():
-    return Path("test_mapping_file.csv")
+    return FIXTURES / "test_mapping_file.csv"
diff --git a/tests/test_mapping_file.csv b/tests/fixtures/test_mapping_file.csv
similarity index 100%
rename from tests/test_mapping_file.csv
rename to tests/fixtures/test_mapping_file.csv
diff --git a/tests/test_align.py b/tests/test_align.py
index 35be3bab4737cb3fccef82ee4de8e87c0ba36266..14725f29b752bf1e9dba3fae542111a2ee3a3074 100644
--- a/tests/test_align.py
+++ b/tests/test_align.py
@@ -3,7 +3,7 @@ import pytest
 
 
 @pytest.mark.parametrize(
-    "query,target",
+    ("query", "target"),
     [
         (
             "Gérard de Nerval was born in Paris in 1808 .",
diff --git a/tests/test_compute_matches.py b/tests/test_compute_matches.py
index 270c448d8c10ea7ac6ae76794fc71b98921521ce..2cd85864df27d5092697e085bcc38fb110fe497a 100644
--- a/tests/test_compute_matches.py
+++ b/tests/test_compute_matches.py
@@ -202,7 +202,7 @@ fake_predict_tags_bk_boundary_2 = [
 
 
 @pytest.mark.parametrize(
-    "test_input, expected",
+    ("test_input", "expected"),
     [
         (
             (
diff --git a/tests/test_compute_scores.py b/tests/test_compute_scores.py
index d51af080788948492c249bf5456d42019ac0ec0a..239754f2db253535958f3404e997e1b0bf410f5f 100644
--- a/tests/test_compute_scores.py
+++ b/tests/test_compute_scores.py
@@ -4,7 +4,7 @@ from nerval import evaluate
 
 
 @pytest.mark.parametrize(
-    "annot,predict,matches",
+    ("annot", "predict", "matches"),
     [
         (
             {"All": 3, "DAT": 1, "LOC": 1, "PER": 1},
diff --git a/tests/test_folder/test_demo_annot.bio b/tests/test_folder/test_demo_annot.bio
deleted file mode 100644
index cf16200fcd0436d943f71127f63894e428fafea7..0000000000000000000000000000000000000000
--- a/tests/test_folder/test_demo_annot.bio
+++ /dev/null
@@ -1,82 +0,0 @@
-Césaire B-PER
-Alphonse I-PER
-Garon I-PER
-marraine O
-Adeline B-PER
-Dionne I-PER
-, O
-soussignés O
-Lecture O
-faite O
-Adéline O
-Dionne O
-Arsène O
-Côté O
-Arpin O
-R O
-Le O
-onze B-DAT
-aout I-DAT
-mil I-DAT
-neuf I-DAT
-cent I-DAT
-un I-DAT
-nous O
-prêtre O
-soussigné O
-avons O
-baptisé O
-Marie B-PER
-Luce I-PER
-Louise I-PER
-, O
-née O
-la B-DAT
-veille I-DAT
-, O
-fille O
-légitime O
-de O
-Carmel B-PER
-Côté I-PER
-, O
-cordonnier B-OCC
-, O
-pré O
-- O
-sent O
-, O
-déclarant O
-ne O
-savoir O
-signer O
-, O
-et O
-de O
-Eugé B-PER
-nie I-PER
-Fréchette I-PER
-, O
-de O
-cette B-LOC
-paroisse I-LOC
-. O
-Parrain O
-Napoléon B-PER
-Fréchette I-PER
-, O
-marraine O
-Adeline B-PER
-Tremblay I-PER
-, O
-soussignés O
-, O
-de O
-Ste B-LOC
-Luce I-LOC
-, O
-Lec O
-- O
-ture O
-faite O
-. O
diff --git a/tests/test_folder/test_demo_predict.bio b/tests/test_folder/test_demo_predict.bio
deleted file mode 100644
index 7e01c2d127aa47c95c49ab87a06e06d86f9af9b0..0000000000000000000000000000000000000000
--- a/tests/test_folder/test_demo_predict.bio
+++ /dev/null
@@ -1,81 +0,0 @@
-Césaire B-PER
-Alphonse O
-Garon B-PER
-marraine O
-Adeline B-PER
-Dionne I-PER
-, O
-soussignés O
-Lecture O
-faite O
-Adéline O
-Dionne O
-Arsène O
-Côté O
-Arpin O
-R O
-Le O
-onze B-DAT
-aout I-DAT
-mil I-DAT
-neuf I-DAT
-cent I-DAT
-un O
-nous O
-pretre O
-soussigné O
-avons O
-baptisé O
-Marie B-PER
-Luce I-PER
-Louise I-PER
-, O
-née O
-la B-DAT
-veille I-DAT
-, O
-fille O
-légitime O
-de O
-Carmel B-PER
-Côté I-PER
-, O
-cordonnier B-OCC
-, O
-pré O
-- O
-sent O
-, O
-déclarant O
-ne O
-savoir O
-signer O
-, O
-et O
-de O
-Eugé B-PER
-nie I-PER
-Fréchette I-PER
-, O
-de O
-cette B-LOC
-paroisse I-LOC
-. O
-Parrain O
-Napoléon B-PER
-Fréchette I-PER
-, O
-marraine O
-Adéline B-PER
-Tremblay I-PER
-, O
-sousignés O
-, O
-de O
-St B-LOC
-. I-LOC
-Luce O
-, O
-Lec O
-ture O
-faite O
diff --git a/tests/test_folder/test_toy_annot.bio b/tests/test_folder/test_toy_annot.bio
deleted file mode 100644
index 5a941ee8ce361e67dbd213b2b2cd5d6a6a53e4ef..0000000000000000000000000000000000000000
--- a/tests/test_folder/test_toy_annot.bio
+++ /dev/null
@@ -1,39 +0,0 @@
-John B-PER
-Ronald I-PER
-Reuel I-PER
-Tolkien I-PER
-was O
-born O
-on O
-three B-DAT
-January I-DAT
-eighteen I-DAT
-ninety I-DAT
-- I-DAT
-two I-DAT
-in O
-Bloemfontein B-LOC
-in O
-the O
-Orange B-LOC
-Free I-LOC
-State I-LOC
-, O
-to O
-Arthur B-PER
-Reuel I-PER
-Tolkien I-PER
-, O
-an O
-English O
-bank B-OCC
-manager I-OCC
-, O
-and O
-his O
-wife O
-Mabel B-PER
-, O
-née O
-Suffield B-PER
-. O
diff --git a/tests/test_folder/test_toy_predict.bio b/tests/test_folder/test_toy_predict.bio
deleted file mode 100644
index 5a941ee8ce361e67dbd213b2b2cd5d6a6a53e4ef..0000000000000000000000000000000000000000
--- a/tests/test_folder/test_toy_predict.bio
+++ /dev/null
@@ -1,39 +0,0 @@
-John B-PER
-Ronald I-PER
-Reuel I-PER
-Tolkien I-PER
-was O
-born O
-on O
-three B-DAT
-January I-DAT
-eighteen I-DAT
-ninety I-DAT
-- I-DAT
-two I-DAT
-in O
-Bloemfontein B-LOC
-in O
-the O
-Orange B-LOC
-Free I-LOC
-State I-LOC
-, O
-to O
-Arthur B-PER
-Reuel I-PER
-Tolkien I-PER
-, O
-an O
-English O
-bank B-OCC
-manager I-OCC
-, O
-and O
-his O
-wife O
-Mabel B-PER
-, O
-née O
-Suffield B-PER
-. O
diff --git a/tests/test_get_labels_aligned.py b/tests/test_get_labels_aligned.py
index b4daa39e04d305b6bf679a2d2a1c5706ad7c75f0..4e0650e3e92062e2ed0c4219d2b6137fa44ae967 100644
--- a/tests/test_get_labels_aligned.py
+++ b/tests/test_get_labels_aligned.py
@@ -97,7 +97,7 @@ expected_predict_tags_aligned = [
 
 
 @pytest.mark.parametrize(
-    "test_input, expected",
+    ("test_input", "expected"),
     [
         (
             (fake_annot_original, fake_annot_aligned, fake_annot_tags_original),
diff --git a/tests/test_parse_bio.py b/tests/test_parse_bio.py
index 66f89577211910047b1a7470f12c47a4d40697d0..5f807341a0bb05c5b20bd839c5a77c5eb30c5a7d 100644
--- a/tests/test_parse_bio.py
+++ b/tests/test_parse_bio.py
@@ -1,3 +1,5 @@
+import re
+
 import pytest
 
 from nerval import evaluate
@@ -168,7 +170,7 @@ expected_parsed_end_of_file = {
 
 
 @pytest.mark.parametrize(
-    "test_input, expected",
+    ("test_input", "expected"),
     [
         (pytest.lazy_fixture("fake_annot_bio"), expected_parsed_annot),
         (pytest.lazy_fixture("fake_predict_bio"), expected_parsed_predict),
@@ -183,18 +185,21 @@ def test_parse_bio(test_input, expected):
 
 
 def test_parse_bio_bad_input(bad_bio):
-    with pytest.raises(Exception):
-        evaluate.parse_bio(bad_bio)
+    lines = bad_bio.read_text().strip().splitlines()
+    with pytest.raises(
+        Exception, match=re.escape("The file is not in BIO format: check line 1 (file)")
+    ):
+        evaluate.parse_bio(lines)
 
 
 @pytest.mark.parametrize(
-    "line, word, label",
-    (
+    ("line", "word", "label"),
+    [
         ("Hi B-ORG", "Hi", "B-ORG"),
         ("Hi B-Org or maybe not org", "Hi", "B-Org or maybe not org"),
         ("1258 B-Date et Lieu", "1258", "B-Date et Lieu"),
         ("Devoti B-Sous-titre", "Devoti", "B-Sous-titre"),
-    ),
+    ],
 )
 def test_parse_line(line, word, label):
     assert parse_line(index=0, line=line) == (word, label)
@@ -202,21 +207,24 @@ def test_parse_line(line, word, label):
 
 @pytest.mark.parametrize(
     "line",
-    (("HiB-ORG"), ("HiB-ORG or maybe not")),
+    [("HiB-ORG"), ("HiB-ORG or maybe not")],
 )
 def test_parse_line_crash(line):
-    with pytest.raises(Exception):
+    with pytest.raises(
+        Exception,
+        match=re.escape(f"The file is not in BIO format: check line 0 ({line})"),
+    ):
         parse_line(index=0, line=line)
 
 
 @pytest.mark.parametrize(
-    "label, expected_type",
-    (
+    ("label", "expected_type"),
+    [
         ("B-ORG", "ORG"),
         ("B-Date et Lieu", "Date et Lieu"),
         ("I-Date et Lieu", "Date et Lieu"),
         ("B-Sous-titre", "Sous-titre"),
-    ),
+    ],
 )
 def test_get_type_label(label, expected_type):
     assert get_type_label(label) == expected_type
diff --git a/tests/test_run.py b/tests/test_run.py
index 2381dd68d6c160a3b7f8bc0077263bef73e02622..63b8ebe8195a8b0e63d58bd05789d7f7af511a0b 100644
--- a/tests/test_run.py
+++ b/tests/test_run.py
@@ -1,11 +1,14 @@
+import re
+from pathlib import Path
+
 import pytest
 
 from nerval import evaluate
 
 
 @pytest.mark.parametrize(
-    "annotation, prediction, expected",
-    (
+    ("annotation", "prediction", "expected"),
+    [
         (
             pytest.lazy_fixture("fake_annot_bio"),
             pytest.lazy_fixture("fake_predict_bio"),
@@ -82,7 +85,7 @@ from nerval import evaluate
                 },
             },
         ),
-    ),
+    ],
 )
 def test_run(annotation, prediction, expected):
     assert (
@@ -97,16 +100,22 @@ def test_run(annotation, prediction, expected):
 
 
 def test_run_empty_bio(empty_bio):
-    with pytest.raises(Exception):
-        evaluate.run(empty_bio, empty_bio, 0.3)
+    with pytest.raises(
+        Exception, match="No content found in annotation or prediction files."
+    ):
+        evaluate.run(empty_bio, empty_bio, 0.3, False)
 
 
 def test_run_empty_entry():
-    with pytest.raises(TypeError):
-        evaluate.run(None, None, 0.3)
+    with pytest.raises(
+        AssertionError,
+        match=re.escape("Error: Input file invalid.bio does not exist"),
+    ):
+        evaluate.run(Path("invalid.bio"), Path("invalid.bio"), 0.3, False)
 
 
-@pytest.mark.parametrize("threshold", ([0.3]))
-def test_run_multiple(csv_file, folder_bio, threshold):
-    with pytest.raises(Exception):
-        evaluate.run_multiple(csv_file, folder_bio, threshold)
+def test_run_multiple(csv_file, folder_bio):
+    with pytest.raises(
+        Exception, match="No file found for files demo_annot.bio, demo_predict.bio"
+    ):
+        evaluate.run_multiple(csv_file, folder_bio, 0.3, False)