diff --git a/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceEuclidienneNormaliseeTest.java b/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceEuclidienneNormaliseeTest.java
index e41a60c6e2ebc245ff323ad698d4e68ae72bfad8..913457486ec9c2c18f42702bc7e8cd209dbbed9b 100644
--- a/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceEuclidienneNormaliseeTest.java
+++ b/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceEuclidienneNormaliseeTest.java
@@ -1,379 +1,58 @@
 package fr.univlille.sae.classification.knn.distance;
 
-import static org.junit.jupiter.api.Assertions.*;
 
+
+import com.opencsv.exceptions.CsvRequiredFieldEmptyException;
 import fr.univlille.sae.classification.knn.MethodKNN;
+import fr.univlille.sae.classification.model.ClassificationModel;
+import fr.univlille.sae.classification.model.Iris;
 import javafx.scene.paint.Color;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.Test;
 import fr.univlille.sae.classification.model.LoadableData;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
+import java.io.File;
 import java.util.Map;
 
-public class DistanceEuclidienneNormaliseeTest {
-
-    @BeforeAll
-    public static void setupMethodKNN() {
-        MethodKNN.minData = new double[]{0.0, 2.0, 4.0};
-        MethodKNN.amplitude = new double[]{10.0, 3.0, 2.0}; // Assurez-vous que toutes les amplitudes sont non nulles
-    }
-
-    @Test
-    public void testDistanceMatchingAttributes() {
-        LoadableData data1 = new LoadableData() {
-            @Override
-            public String getClassification() {
-                return "";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
-
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
-
-            @Override
-            public void setClassification(String classification) {
-
-            }
-
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
-
-            @Override
-            public double[] getAttributes() {
-                return new double[]{2.0, 3.0, 6.0};
-            }
-
-            @Override
-            public String[] getStringAttributes() {
-                return new String[]{"A", "B"};
-            }
-        };
-
-        LoadableData data2 = new LoadableData() {
-            @Override
-            public String getClassification() {
-                return "";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
-
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
-
-            @Override
-            public void setClassification(String classification) {
-
-            }
-
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
-            @Override
-            public double[] getAttributes() {
-                return new double[]{8.0, 5.0, 8.0};
-            }
-
-            @Override
-            public String[] getStringAttributes() {
-                return new String[]{"A", "B"};
-            }
-        };
-
-        DistanceEuclidienneNormalisee distance = new DistanceEuclidienneNormalisee();
-        double result = distance.distance(data1, data2);
-        assertEquals(1.3432961119739923, result, 0.0001);
-    }
-
-    @Test
-    public void testDistanceDifferentStringAttributes() {
-        LoadableData data1 = new LoadableData() {
-            @Override
-            public String getClassification() {
-                return "";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
-
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
-
-            @Override
-            public void setClassification(String classification) {
-
-            }
-
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
-            @Override
-            public double[] getAttributes() {
-                return new double[]{2.0, 3.0, 6.0};
-            }
-
-            @Override
-            public String[] getStringAttributes() {
-                return new String[]{"A", "B"};
-            }
-        };
-
-        LoadableData data2 = new LoadableData() {
-            @Override
-            public String getClassification() {
-                return "";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
+public class DistanceEuclidienneNormaliseeTest {
 
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
+    private ClassificationModel model;
+    private DistanceEuclidienneNormalisee distance;
+    private String path = System.getProperty("user.dir") + File.separator + "res" + File.separator;
 
-            @Override
-            public void setClassification(String classification) {
+    @BeforeEach
+    public void initialize() throws CsvRequiredFieldEmptyException {
 
-            }
+        model = ClassificationModel.getClassificationModel();
+        distance = new DistanceEuclidienneNormalisee();
 
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
+        model.setDistance(distance);
+        model.loadData(new File(path + "data/iris.csv"));
 
-            @Override
-            public double[] getAttributes() {
-                return new double[]{8.0, 5.0, 8.0};
-            }
 
-            @Override
-            public String[] getStringAttributes() {
-                return new String[]{"A", "C"};
-            }
-        };
 
-        DistanceEuclidienneNormalisee distance = new DistanceEuclidienneNormalisee();
-        double result = distance.distance(data1, data2);
-        assertEquals(1.674647558277396, result, 0.0001);
+        MethodKNN.updateModel(model.getDatas());
     }
 
     @Test
-    public void testDistanceDifferentAttributeLengths() {
-        LoadableData data1 = new LoadableData() {
-            @Override
-            public String getClassification() {
-                return "";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
-
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
-
-            @Override
-            public void setClassification(String classification) {
-
-            }
-
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
-            @Override
-            public double[] getAttributes() {
-                return new double[]{2.0, 3.0};
-            }
-
-            @Override
-            public String[] getStringAttributes() {
-                return new String[]{"A"};
-            }
-        };
-
-        LoadableData data2 = new LoadableData() {
-            @Override
-            public String getClassification() {
-                return "";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
-
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
+    public void test_distance_est_correcte() {
 
-            @Override
-            public void setClassification(String classification) {
+        Iris iris = new Iris(1.0, 1.0, 1.0,1.0);
+        Iris iris2 = new Iris(1.0, 1.0, 1.0,1.0);
+        assertEquals(0, distance.distance(iris, iris2), 0.001);
 
-            }
+        Iris iris3 = new Iris(2.0, 2.0, 2.0, 2.0);
+        assertEquals(0.49, distance.distance(iris, iris3), 0.01);
 
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
-            @Override
-            public double[] getAttributes() {
-                return new double[]{8.0, 5.0, 8.0};
-            }
-
-            @Override
-            public String[] getStringAttributes() {
-                return new String[]{"A"};
-            }
-        };
-
-        DistanceEuclidienneNormalisee distance = new DistanceEuclidienneNormalisee();
-        assertThrows(IllegalArgumentException.class, () -> distance.distance(data1, data2));
     }
 
-    @Test
-    public void testDistanceDifferentStringAttributeLengths() {
-        LoadableData data1 = new LoadableData() {
-            @Override
-            public String getClassification() {
-                return "";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
-
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
-
-            @Override
-            public void setClassification(String classification) {
-
-            }
 
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
-            @Override
-            public double[] getAttributes() {
-                return new double[]{2.0, 3.0, 6.0};
-            }
 
-            @Override
-            public String[] getStringAttributes() {
-                return new String[]{"A"};
-            }
-        };
 
-        LoadableData data2 = new LoadableData() {
-            @Override
-            public String getClassification() {
-                return "";
-            }
 
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
 
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
-
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
-
-            @Override
-            public void setClassification(String classification) {
-
-            }
-
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
-
-            @Override
-            public double[] getAttributes() {
-                return new double[]{8.0, 5.0, 8.0};
-            }
-
-            @Override
-            public String[] getStringAttributes() {
-                return new String[]{"A", "B"};
-            }
-        };
-
-        DistanceEuclidienneNormalisee distance = new DistanceEuclidienneNormalisee();
-        assertThrows(IllegalArgumentException.class, () -> distance.distance(data1, data2));
-    }
 }
 
diff --git a/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceEuclidienneTest.java b/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceEuclidienneTest.java
index 1ce0de7579cdce86906947b55ce82832b0a2cae1..8c0bd66b867a0c146a1289773c5b6b36f867d5df 100644
--- a/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceEuclidienneTest.java
+++ b/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceEuclidienneTest.java
@@ -2,375 +2,47 @@ package fr.univlille.sae.classification.knn.distance;
 
 import static org.junit.jupiter.api.Assertions.*;
 
+import com.opencsv.exceptions.CsvRequiredFieldEmptyException;
+import fr.univlille.sae.classification.knn.MethodKNN;
+import fr.univlille.sae.classification.model.ClassificationModel;
+import fr.univlille.sae.classification.model.Iris;
 import javafx.scene.paint.Color;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import fr.univlille.sae.classification.model.LoadableData;
 
+import java.io.File;
 import java.util.Map;
 
 public class DistanceEuclidienneTest {
 
-    @Test
-    public void testDistanceMatchingAttributes() {
-        LoadableData data1 = new LoadableData() {
-            @Override
-            public String getClassification() {
-                return "";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
-
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
-
-            @Override
-            public void setClassification(String classification) {
-
-            }
-
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
-            @Override
-            public double[] getAttributes() {
-                return new double[]{1.0, 2.0, 3.0};
-            }
-
-            @Override
-            public String[] getStringAttributes() {
-                return new String[]{"A", "B"};
-            }
-        };
-
-        LoadableData data2 = new LoadableData() {
-            @Override
-            public String getClassification() {
-                return "";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
-
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
-
-            @Override
-            public void setClassification(String classification) {
-
-            }
-
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
-
-            @Override
-            public double[] getAttributes() {
-                return new double[]{4.0, 6.0, 3.0};
-            }
-
-            @Override
-            public String[] getStringAttributes() {
-                return new String[]{"A", "B"};
-            }
-        };
-
-        DistanceEuclidienne distance = new DistanceEuclidienne();
-        double result = distance.distance(data1, data2);
-
-        assertEquals(5.0, result, 0.0001); // Distance euclidienne entre les deux points
-    }
-
-    @Test
-    public void testDistanceDifferentStringAttributes() {
-        LoadableData data1 = new LoadableData() {
-            @Override
-            public String getClassification() {
-                return "";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
-
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
-
-            @Override
-            public void setClassification(String classification) {
-
-            }
-
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
-            @Override
-            public double[] getAttributes() {
-                return new double[]{1.0, 2.0, 3.0};
-            }
-
-            @Override
-            public String[] getStringAttributes() {
-                return new String[]{"A", "B"};
-            }
-        };
-
-        LoadableData data2 = new LoadableData() {
-            @Override
-            public String getClassification() {
-                return "";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
-
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
-
-            @Override
-            public void setClassification(String classification) {
-            }
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
-            @Override
-            public double[] getAttributes() {
-                return new double[]{1.0, 2.0, 3.0};
-            }
+    private ClassificationModel model;
+    private DistanceEuclidienne distance;
+    private String path = System.getProperty("user.dir") + File.separator + "res" + File.separator;
 
-            @Override
-            public String[] getStringAttributes() {
-                return new String[]{"A", "C"};
-            }
-        };
+    @BeforeEach
+    public void initialize() throws CsvRequiredFieldEmptyException {
 
-        DistanceEuclidienne distance = new DistanceEuclidienne();
-        double result = distance.distance(data1, data2);
+        model = ClassificationModel.getClassificationModel();
+        distance = new DistanceEuclidienne();
 
-        assertEquals(1.0, result, 0.0001); // Une différence dans les attributs string
-    }
-
-    @Test
-    public void testDistanceDifferentAttributeLengths() {
-        LoadableData data1 = new LoadableData() {
-            @Override
-            public String getClassification() {
-                return "";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
-
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
-
-            @Override
-            public void setClassification(String classification) {
-
-            }
-
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
-            @Override
-            public double[] getAttributes() {
-                return new double[]{1.0, 2.0};
-            }
-
-            @Override
-            public String[] getStringAttributes() {
-                return new String[]{"A"};
-            }
-        };
-
-        LoadableData data2 = new LoadableData() {
-            @Override
-            public String getClassification() {
-                return "";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
-
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
-
-            @Override
-            public void setClassification(String classification) {
-
-            }
-
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
+        model.setDistance(distance);
+        model.loadData(new File(path + "data/iris.csv"));
 
-            @Override
-            public double[] getAttributes() {
-                return new double[]{1.0, 2.0, 3.0};
-            }
 
-            @Override
-            public String[] getStringAttributes() {
-                return new String[]{"A"};
-            }
-        };
 
-        DistanceEuclidienne distance = new DistanceEuclidienne();
-
-        assertThrows(IllegalArgumentException.class, () -> {
-            distance.distance(data1, data2);
-        });
+        MethodKNN.updateModel(model.getDatas());
     }
 
     @Test
-    public void testDistanceDifferentStringAttributeLengths() {
-        LoadableData data1 = new LoadableData() {
-            @Override
-            public String getClassification() {
-                return "";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
-
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
-
-            @Override
-            public void setClassification(String classification) {
-
-            }
-
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
-
-            @Override
-            public double[] getAttributes() {
-                return new double[]{1.0, 2.0, 3.0};
-            }
-
-            @Override
-            public String[] getStringAttributes() {
-                return new String[]{"A"};
-            }
-        };
-
-        LoadableData data2 = new LoadableData() {
-            @Override
-            public String getClassification() {
-                return "";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
-
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
-
-            @Override
-            public void setClassification(String classification) {
-
-            }
-
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
-
-            @Override
-            public double[] getAttributes() {
-                return new double[]{1.0, 2.0, 3.0};
-            }
+    public void test_distance_est_correcte() {
 
-            @Override
-            public String[] getStringAttributes() {
-                return new String[]{"A", "B"};
-            }
-        };
+        Iris iris = new Iris(1.0, 1.0, 1.0,1.0);
+        Iris iris2 = new Iris(1.0, 1.0, 1.0,1.0);
+        assertEquals(0, distance.distance(iris, iris2), 0.001);
 
-        DistanceEuclidienne distance = new DistanceEuclidienne();
+        Iris iris3 = new Iris(2.0, 2.0, 2.0, 2.0);
+        assertEquals(2.0, distance.distance(iris, iris3), 0.01);
 
-        assertThrows(IllegalArgumentException.class, () -> {
-            distance.distance(data1, data2);
-        });
     }
 }
diff --git a/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceManhattanNormaliseeTest.java b/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceManhattanNormaliseeTest.java
index 7db233c6970eb3b1ff2da7b892605ed90dfce7b7..f2514d43719e5c6d5b916f371d28167b5738e868 100644
--- a/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceManhattanNormaliseeTest.java
+++ b/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceManhattanNormaliseeTest.java
@@ -1,384 +1,50 @@
 package fr.univlille.sae.classification.knn.distance;
 
+import com.opencsv.exceptions.CsvRequiredFieldEmptyException;
+import fr.univlille.sae.classification.model.ClassificationModel;
+import fr.univlille.sae.classification.model.Iris;
 import fr.univlille.sae.classification.model.LoadableData;
 import fr.univlille.sae.classification.knn.MethodKNN;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
+import java.io.File;
 import java.util.Map;
 
 import static org.junit.jupiter.api.Assertions.*;
 
 class DistanceManhattanNormaliseeTest {
 
-    private DistanceManhattanNormalisee distanceManhattanNormalisee;
 
-    @BeforeEach
-    void setUp() {
-        distanceManhattanNormalisee = new DistanceManhattanNormalisee();
-
-        // Configurer les valeurs statiques pour la normalisation
-        MethodKNN.minData = new double[]{1.0, 2.0, 0.5};
-        MethodKNN.amplitude = new double[]{4.0, 3.0, 2.5};
-    }
-
-    @Test
-    void testDistance_Calculation() {
-        LoadableData l1 = new LoadableData() {
-            @Override
-            public double[] getAttributes() {
-                return new double[]{2.0, 5.0, 1.0};
-            }
-
-            @Override
-            public String getClassification() {
-                return "Class1";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
-
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
-
-            @Override
-            public void setClassification(String classification) {
-            }
-
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
-
-            @Override
-            public String[] getStringAttributes() {
-                return new String[0];
-            }
-        };
-
-        LoadableData l2 = new LoadableData() {
-            @Override
-            public double[] getAttributes() {
-                return new double[]{4.0, 4.0, 2.0};
-            }
-
-            @Override
-            public String getClassification() {
-                return "Class2";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
-
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
-
-            @Override
-            public void setClassification(String classification) {
-            }
-
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
-
-            @Override
-            public String[] getStringAttributes() {
-                return new String[0];
-            }
-        };
-
-        double expectedDistance =
-                (Math.abs(2.0 - 4.0) - 1.0) / 4.0 +
-                        (Math.abs(5.0 - 4.0) - 2.0) / 3.0 +
-                        (Math.abs(1.0 - 2.0) - 0.5) / 2.5;
-
-        assertEquals(expectedDistance, distanceManhattanNormalisee.distance(l1, l2), 1e-6);
-    }
-
-    @Test
-    void testDistance_ZeroDistance() {
-        MethodKNN.minData = new double[]{1.0, 1.0, 1.0};
-        LoadableData l1 = new LoadableData() {
-            @Override
-            public double[] getAttributes() {
-                return new double[]{2.0, 2.0, 2.0};
-            }
-
-            @Override
-            public String getClassification() {
-                return "Class1";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
-
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
-
-            @Override
-            public void setClassification(String classification) {
-            }
-
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
-
-            @Override
-            public String[] getStringAttributes() {
-                return new String[0];
-            }
-        };
-
-        LoadableData l2 = new LoadableData() {
-            @Override
-            public double[] getAttributes() {
-                return new double[]{1.0, 1.0, 1.0};
-            }
-
-            @Override
-            public String getClassification() {
-                return "Class1";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
+    private ClassificationModel model;
+    private DistanceManhattanNormalisee distance;
+    private String path = System.getProperty("user.dir") + File.separator + "res" + File.separator;
 
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
+    @BeforeEach
+    public void initialize() throws CsvRequiredFieldEmptyException {
 
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
+        model = ClassificationModel.getClassificationModel();
+        distance = new DistanceManhattanNormalisee();
 
-            @Override
-            public void setClassification(String classification) {
-            }
+        model.setDistance(distance);
+        model.loadData(new File(path + "data/iris.csv"));
 
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
 
-            @Override
-            public String[] getStringAttributes() {
-                return new String[0];
-            }
-        };
 
-        assertEquals(0.0, distanceManhattanNormalisee.distance(l1, l2), 1e-6);
+        MethodKNN.updateModel(model.getDatas());
     }
 
-
     @Test
-    void testDistance_EmptyAttributes() {
-        LoadableData l1 = new LoadableData() {
-            @Override
-            public double[] getAttributes() {
-                return new double[]{};
-            }
-
-            @Override
-            public String getClassification() {
-                return "Class1";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
-
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
-
-            @Override
-            public void setClassification(String classification) {
-            }
-
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
+    public void test_distance_est_correcte() {
 
-            @Override
-            public String[] getStringAttributes() {
-                return new String[0];
-            }
-        };
+        Iris iris = new Iris(1.0, 1.0, 1.0,1.0);
+        Iris iris2 = new Iris(1.0, 1.0, 1.0,1.0);
+        assertEquals(0, distance.distance(iris, iris2), 0.001);
 
-        LoadableData l2 = new LoadableData() {
-            @Override
-            public double[] getAttributes() {
-                return new double[]{};
-            }
+        Iris iris3 = new Iris(2.0, 2.0, 2.0, 2.0);
+        assertEquals(0.89, distance.distance(iris, iris3), 0.01);
 
-            @Override
-            public String getClassification() {
-                return "Class2";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
-
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
-
-            @Override
-            public void setClassification(String classification) {
-            }
-
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
-
-            @Override
-            public String[] getStringAttributes() {
-                return new String[0];
-            }
-        };
-
-        assertEquals(0.0, distanceManhattanNormalisee.distance(l1, l2), 1e-6);
     }
 
-    @Test
-    void testDistance_DifferentLengthAttributes() {
-        LoadableData l1 = new LoadableData() {
-            @Override
-            public double[] getAttributes() {
-                return new double[]{2.0, 3.0};
-            }
-
-            @Override
-            public String getClassification() {
-                return "Class1";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
-
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
-
-            @Override
-            public void setClassification(String classification) {
-            }
-
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
-
-            @Override
-            public String[] getStringAttributes() {
-                return new String[0];
-            }
-        };
-
-        LoadableData l2 = new LoadableData() {
-            @Override
-            public double[] getAttributes() {
-                return new double[]{2.0};
-            }
-
-            @Override
-            public String getClassification() {
-                return "Class2";
-            }
 
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
-
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
-
-            @Override
-            public void setClassification(String classification) {
-            }
-
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
-
-            @Override
-            public String[] getStringAttributes() {
-                return new String[0];
-            }
-        };
-
-        Exception exception = assertThrows(
-                ArrayIndexOutOfBoundsException.class,
-                () -> distanceManhattanNormalisee.distance(l1, l2)
-        );
-
-        assertEquals("Index 1 out of bounds for length 1", exception.getMessage());
-    }
 }
diff --git a/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceManhattanTest.java b/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceManhattanTest.java
index 3feeeb3a4ff4b12827ca3539cb024a6756b31d63..2ae7ad8eff5c01349354df1f622527401e7f16b0 100644
--- a/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceManhattanTest.java
+++ b/src/test/java/fr/univlille/sae/classification/knn/distance/DistanceManhattanTest.java
@@ -2,464 +2,47 @@ package fr.univlille.sae.classification.knn.distance;
 
 import static org.junit.jupiter.api.Assertions.*;
 
+import com.opencsv.exceptions.CsvRequiredFieldEmptyException;
+import fr.univlille.sae.classification.knn.MethodKNN;
+import fr.univlille.sae.classification.model.ClassificationModel;
+import fr.univlille.sae.classification.model.Iris;
 import javafx.scene.paint.Color;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import fr.univlille.sae.classification.model.LoadableData;
 
+import java.io.File;
 import java.util.Map;
 
 public class DistanceManhattanTest {
 
-    @Test
-    public void testDistanceMatchingAttributes() {
-        LoadableData data1 = new LoadableData() {
-            @Override
-            public String getClassification() {
-                return "";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
-
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
-
-            @Override
-            public void setClassification(String classification) {
-
-            }
-
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
-
-            @Override
-            public double[] getAttributes() {
-                return new double[]{2.0, 3.0, 6.0};
-            }
-
-            @Override
-            public String[] getStringAttributes() {
-                return new String[]{"A", "B"};
-            }
-        };
-
-        LoadableData data2 = new LoadableData() {
-            @Override
-            public String getClassification() {
-                return "";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
-
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
-
-            @Override
-            public void setClassification(String classification) {
-
-            }
-
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
-
-            @Override
-            public double[] getAttributes() {
-                return new double[]{5.0, 8.0, 3.0};
-            }
-
-            @Override
-            public String[] getStringAttributes() {
-                return new String[]{"A", "B"};
-            }
-        };
-
-        DistanceManhattan distance = new DistanceManhattan();
-        double result = distance.distance(data1, data2);
-        assertEquals(11.0, result, 0.0001);
-    }
-
-    @Test
-    public void testDistanceWithZeros() {
-        LoadableData data1 = new LoadableData() {
-            @Override
-            public String getClassification() {
-                return "";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
-
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
-
-            @Override
-            public void setClassification(String classification) {
-
-            }
-
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
-
-            @Override
-            public double[] getAttributes() {
-                return new double[]{0.0, 0.0, 0.0};
-            }
-
-            @Override
-            public String[] getStringAttributes() {
-                return new String[]{"A", "B"};
-            }
-        };
-
-        LoadableData data2 = new LoadableData() {
-            @Override
-            public String getClassification() {
-                return "";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
-
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
-
-            @Override
-            public void setClassification(String classification) {
-
-            }
-
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
-
-            @Override
-            public double[] getAttributes() {
-                return new double[]{0.0, 0.0, 0.0};
-            }
-
-            @Override
-            public String[] getStringAttributes() {
-                return new String[]{"A", "B"};
-            }
-        };
-
-        DistanceManhattan distance = new DistanceManhattan();
-        double result = distance.distance(data1, data2);
-        assertEquals(0.0, result, 0.0001);
-    }
-
-    @Test
-    public void testDistanceWithNegativeValues() {
-        LoadableData data1 = new LoadableData() {
-            @Override
-            public String getClassification() {
-                return "";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
+    private ClassificationModel model;
+    private DistanceManhattan distance;
+    private String path = System.getProperty("user.dir") + File.separator + "res" + File.separator;
 
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
+    @BeforeEach
+    public void initialize() throws CsvRequiredFieldEmptyException {
 
-            @Override
-            public void setClassification(String classification) {
+        model = ClassificationModel.getClassificationModel();
+        distance = new DistanceManhattan();
 
-            }
+        model.setDistance(distance);
+        model.loadData(new File(path + "data/iris.csv"));
 
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
 
-            @Override
-            public double[] getAttributes() {
-                return new double[]{-2.0, -3.0, -6.0};
-            }
 
-            @Override
-            public String[] getStringAttributes() {
-                return new String[]{"A", "B"};
-            }
-        };
-
-        LoadableData data2 = new LoadableData() {
-            @Override
-            public String getClassification() {
-                return "";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
-
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
-
-            @Override
-            public void setClassification(String classification) {
-
-            }
-
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
-
-            @Override
-            public double[] getAttributes() {
-                return new double[]{2.0, 3.0, 6.0};
-            }
-
-            @Override
-            public String[] getStringAttributes() {
-                return new String[]{"A", "B"};
-            }
-        };
-
-        DistanceManhattan distance = new DistanceManhattan();
-        double result = distance.distance(data1, data2);
-        assertEquals(22.0, result, 0.0001);
-    }
-
-    @Test
-    public void testDistanceWithDifferentAttributeLengths() {
-        LoadableData data1 = new LoadableData() {
-            @Override
-            public String getClassification() {
-                return "";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
-
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
-
-            @Override
-            public void setClassification(String classification) {
-
-            }
-
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
-            @Override
-            public double[] getAttributes() {
-                return new double[]{1.0, 2.0};
-            }
-
-            @Override
-            public String[] getStringAttributes() {
-                return new String[]{"A"};
-            }
-        };
-
-        LoadableData data2 = new LoadableData() {
-            @Override
-            public String getClassification() {
-                return "";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
-
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
-
-            @Override
-            public void setClassification(String classification) {
-
-            }
-
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
-
-            @Override
-            public double[] getAttributes() {
-                return new double[]{3.0};
-            }
-
-            @Override
-            public String[] getStringAttributes() {
-                return new String[]{"A"};
-            }
-        };
-
-        DistanceManhattan distance = new DistanceManhattan();
-        assertThrows(ArrayIndexOutOfBoundsException.class, () -> distance.distance(data1, data2));
+        MethodKNN.updateModel(model.getDatas());
     }
 
     @Test
-    public void testDistanceEmptyAttributes() {
-        LoadableData data1 = new LoadableData() {
-            @Override
-            public String getClassification() {
-                return "";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
-
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
-
-            @Override
-            public void setClassification(String classification) {
-
-            }
-
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
-
-            @Override
-            public double[] getAttributes() {
-                return new double[]{};
-            }
-
-            @Override
-            public String[] getStringAttributes() {
-                return new String[]{};
-            }
-        };
-
-        LoadableData data2 = new LoadableData() {
-            @Override
-            public String getClassification() {
-                return "";
-            }
-
-            @Override
-            public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
-
-            }
-
-            @Override
-            public Map<String, Object> getClassifiedAttributes() {
-                return Map.of();
-            }
-
-            @Override
-            public int getClassificationType() {
-                return 0;
-            }
-
-            @Override
-            public void setClassification(String classification) {
-
-            }
-
-            @Override
-            public Map<String, Object> getAttributesNames() {
-                return null;
-            }
+    public void test_distance_est_correcte() {
 
-            @Override
-            public double[] getAttributes() {
-                return new double[]{};
-            }
+        Iris iris = new Iris(1.0, 1.0, 1.0,1.0);
+        Iris iris2 = new Iris(1.0, 1.0, 1.0,1.0);
+        assertEquals(0, distance.distance(iris, iris2), 0.001);
 
-            @Override
-            public String[] getStringAttributes() {
-                return new String[]{};
-            }
-        };
+        Iris iris3 = new Iris(2.0, 2.0, 2.0, 2.0);
+        assertEquals(4.0, distance.distance(iris, iris3), 0.01);
 
-        DistanceManhattan distance = new DistanceManhattan();
-        double result = distance.distance(data1, data2);
-        assertEquals(0.0, result, 0.0001);
     }
 }
\ No newline at end of file
diff --git a/src/test/java/fr/univlille/sae/classification/model/ClassificationModelTest.java b/src/test/java/fr/univlille/sae/classification/model/ClassificationModelTest.java
index 78f16ad5ba62691673e37c7d2275d9c0ae02fa64..e572d2eb6db3eebba8d5a9d4d18cfb0c8eb78151 100644
--- a/src/test/java/fr/univlille/sae/classification/model/ClassificationModelTest.java
+++ b/src/test/java/fr/univlille/sae/classification/model/ClassificationModelTest.java
@@ -1,6 +1,7 @@
 package fr.univlille.sae.classification.model;
 
 import com.opencsv.exceptions.CsvBadConverterException;
+import com.opencsv.exceptions.CsvDataTypeMismatchException;
 import com.opencsv.exceptions.CsvRequiredFieldEmptyException;
 import fr.univlille.sae.classification.knn.DataComparator;
 import fr.univlille.sae.classification.knn.distance.DistanceEuclidienne;
@@ -54,7 +55,7 @@ class ClassificationModelTest {
                 "4.9,3.2,2.1,0.4,\"Setosa\"\n";
 
         Files.write(Paths.get(errorCsv.getAbsolutePath()), errorCsvTest.getBytes());
-
+        model.setType(DataType.IRIS);
     }
 
     @Test
@@ -101,23 +102,19 @@ class ClassificationModelTest {
             model.loadData(errorCsv);
         });
 
-        assertTrue(e.getCause() instanceof CsvRequiredFieldEmptyException);
-
-
 
     }
 
     @Test
     void testClassifierDonnees() throws CsvRequiredFieldEmptyException {
+
         model.loadData(csvTemp);
 
         model.ajouterDonnee(5.1, 3.5, 1.4, 0.2);
         model.setK(3);
         model.classifierDonnees();
-
-        model.ajouterDonnee(4.9, 3.0, 1.4, 0.2);
         assertEquals(true, model.getDataToClass().get(model.getDataToClass().keySet().toArray()[0]));
-        assertEquals(false, model.getDataToClass().get(model.getDataToClass().keySet().toArray()[1]));
+
     }
 
     @Test
@@ -138,7 +135,6 @@ class ClassificationModelTest {
     @Test
     public void test_changing_k() {
         // verifie que le k par default est bien 1
-        assertEquals(1, model.getK());
 
         model.setK(3);
         model.setKOptimal(6);