diff --git a/src/es/markse/Contenedor.java b/src/es/markse/Contenedor.java
index eb362d16586a22ee246f15ff45e67443a882ad6d..2ec7eb81fb8ca1991dc4e64f35fdafe846cb16a2 100644
--- a/src/es/markse/Contenedor.java
+++ b/src/es/markse/Contenedor.java
@@ -33,52 +33,69 @@ public class Contenedor {
 	 * @param transito Indica si esta en transito (true) o en recogida (false)
 	 * @param techo indica si tiene techo (true) o no (false)
 	 */
-	public Contenedor(String codigoDueno, char equipamiento, String numeroSerie, float pesoContenedor, float maximaCargaUtil, float volumen, boolean transito, boolean techo) {
-		validarCodigoDueno(codigoDueno.toUpperCase());
+	public Contenedor(String codigoDueno, char equipamiento, String numeroSerie, float pesoTara, float maximaCargaUtil, float volumen, boolean transito, boolean techo) {
+		validarCodigoDueno(codigoDueno);
         validarEquipamiento(equipamiento);
+        comprobarPesos(pesoTara, maximaCargaUtil, volumen);
         validarNumeroSerie(numeroSerie);
-		this.pesoTara = pesoContenedor;
+		this.pesoTara = pesoTara;
 		this.maximaCargaUtil = maximaCargaUtil;
 		this.volumen = volumen;
 		this.transito = transito;
 		this.recogida = !transito;
 		this.techo = techo;
 	    String digitoControl = String.valueOf(calcularDigitoControl(codigoDueno, equipamiento, numeroSerie));
-		this.codigo = codigoDueno + equipamiento + numeroSerie + digitoControl;
+		this.codigo = codigoDueno.toUpperCase() + equipamiento + numeroSerie + digitoControl;
 	}
 	
 	/**
 	 * Metodo que compara e codigo del dueño para ver si es correcto
 	 * @param codigoDueno Cadena de 3 letras mayusculas
-	 * @throws Devuelve una excepcion si no coincide con el patron
+	 * @throws IllegalArgumentException Si el codigoDueno no coincide con el patron correcto
 	 */
 	private void validarCodigoDueno(String codigoDueno) {
-	        if (codigoDueno.length() != 3 || !codigoDueno.matches("[A-Za-z]{3}")) {
-	            throw new IllegalArgumentException("El código del dueño debe tener 3 letras mayúsculas.");
-	        }
-	    }
+		if (codigoDueno == null) throw new IllegalArgumentException("El código del dueño debe tener 3 letras mayúsculas.");
+        if (codigoDueno.length() != 3 || !codigoDueno.matches("[A-Za-z]{3}"))
+            throw new IllegalArgumentException("El código del dueño debe tener 3 letras mayúsculas.");
+	}
 	
 	/**
 	 * Metodo que sirve para comparar si el equipamiento es uno de los correctos
 	 * @param equipamiento Es un caracter que indica el equipamiento
-	 * @throws devuelve una excepcion si no es una de esas letras
+	 * @throws IllegalArgumentException si el equipamiento no es correcto (no es ni U ni J ni Z)
 	 */
 	private void validarEquipamiento(char equipamiento) {
-	        if (equipamiento != 'U' && equipamiento != 'J' && equipamiento != 'Z') {
-	            throw new IllegalArgumentException("Equipamiento debe ser 'U', 'J' o 'Z'.");
-	        }
-	    }
+        if (equipamiento != 'U' && equipamiento != 'J' && equipamiento != 'Z') {
+            throw new IllegalArgumentException("Equipamiento debe ser 'U', 'J' o 'Z'.");
+        }
+	}
+	
 	
 	/**
 	 * metodo para comparar si el numero de serie es correcto
 	 * @param numeroSerie el numero de serie del contenedor
-	 * @throws devuelve un error si el patron no coincide (6 numeros)
+	 * @throws Si el numeroSerie no es correcto (no son 6 numeros) o si es nulo
+	 * 
 	 */
 	private void validarNumeroSerie(String numeroSerie) {
-	        if (numeroSerie.length() != 6 || !numeroSerie.matches("\\d{6}")) {
-	            throw new IllegalArgumentException("El número de serie debe tener 6 dígitos.");
-	        }
-	    }
+		if (numeroSerie == null) throw new IllegalArgumentException("El numero de serie no puede ser nulo");
+        if (numeroSerie.length() != 6 || !numeroSerie.matches("\\d{6}")) {
+            throw new IllegalArgumentException("El número de serie debe tener 6 dígitos.");
+        }
+	}
+	
+	/**
+	 * Metodo qe comprueba los pesos de los contenedores
+	 * @param pesoTara Peso del contenedor
+	 * @param maximaCargaUtil Maxima carga util del contenedor
+	 * @param volumen Volumen del contenedor
+	 * @throws IllegalArgumentException si alguno de los pesos es menor que 1
+	 */
+	private void comprobarPesos(float pesoTara, float maximaCargaUtil, float volumen) {
+		if (pesoTara < 1 || maximaCargaUtil <1 || volumen < 1) {
+			throw new IllegalArgumentException("Los pesos deben ser igual o mayores a 1");
+		}
+	}
 	
 	/**
 	 * Metodo que sirve para calcular el diito de control mediante el codigo del dueño, el equipamiento y el
@@ -119,24 +136,23 @@ public class Contenedor {
 	/**
 	 * 1.1.13 Metodo que sirve para cambiar el estado a recogida de un contenedor
 	 * Si esta apilado no puede estar en recogida
+	 * @throws IllegalArgumentException si el contenedor esta apilado
 	 */
 	public void cambiarEstadoARecogida() {
-		if(!this.estadoApilado()) {
-			this.recogida = true;
-			this.transito = false;
-		}
-		
+		if(this.estadoApilado()) throw new IllegalArgumentException("No puedes cambiar el estado a un contenedor apilado");
+		this.recogida = true;
+		this.transito = false;
 	}
 	
 	/**
 	 * 1.1.14 metodo que sirve para cambiar un contenedor a estado de transito
 	 * Si esta apilado no puede estar en transito
+	 * @throws IllegalArgumentException si el contenedor esta apilado
 	 */
 	public void cambiarEstadoATransito() {
-		if (!this.estadoApilado()) {
-			this.transito = true;
-			this.recogida = false;
-		}
+		if(this.estadoApilado()) throw new IllegalArgumentException("No puedes cambiar el estado a un contenedor apilado");
+		this.recogida = false;
+		this.transito = true;
 	}
 	
 	/**
@@ -196,14 +212,6 @@ public class Contenedor {
 		return this.pesoTara*2.20462f;	
 	}
 	
-	/**
-	 * Metodo para añadir un trayecto al contenedor
-	 * @param t Trayecto que añadimos al contenedor
-	 */
-	public void anyadirTrayecto(Trayecto t) {
-		this.trayectos.add(t);
-	}
-	
 	/**
 	 * Metodo que devuelve la maxima carga util de un contenedor
 	 * @return La maxima carga util de un contenedor
@@ -235,6 +243,14 @@ public class Contenedor {
 	public boolean estadoApilado() {
 		return this.apilado;
 	}
-
-	//REALIZAR EL METODO PARA CALCULAR LOS TRAYECTOS
+	
+	/**
+	 * Metodo que sirve para anyadir un trayecto al contenedor
+	 * @param t
+	 */
+	public void anyadirTrayecto(Trayecto t) {
+		//COMPROBAR SI LA FECHA FIN DEL ANTERIOR ES ANTES QUE FECHA INICIO DEL SIGUIENTE
+		//LO MISMO CON EL MUELLE DESTINO Y MUELLE ORIGEN
+		//LO MISMO PUERTO DESTINO Y PUERTO ORIGEN
+	}
 }
\ No newline at end of file
diff --git a/src/es/markse/Muelle.java b/src/es/markse/Muelle.java
index 7338a191adda1197baca7e1ffab8c6728137959a..5d88b4ed01b10f83d4baf7afb96346c16fd365de 100644
--- a/src/es/markse/Muelle.java
+++ b/src/es/markse/Muelle.java
@@ -148,6 +148,7 @@ public class Muelle {
 	 * Metodo para comporbar que los valores no sean nulos a la hora de crear un Objeto de tipo Muelle
 	 * @param identificador Identificador del muelle
 	 * @param cord Coordenadas de muelle (clase GPSCoordinate)
+	 * @throws IllegalArgumentException si el identificador o la coordenada son nulos
 	 */
 	private void comprobarValoresNulos(String identificador, GPSCoordinate cord) {
 		if (identificador == null) throw new IllegalArgumentException("Identificador no puede ser nulo");
@@ -157,6 +158,8 @@ public class Muelle {
 	/**
 	 * Metodo que comprueba si el identificador es correcto (2 digitos)
 	 * @param identificador identificador del muelle
+	 * @throws IllegalArgumentException si la altura o la plaza son menores que 1, o si el identificador
+	 * no es correcto
 	 */
 	private void comprobarValoresMuelle(String identificador, int plazas, int altura) {
 		if (plazas<1) throw new IllegalArgumentException("Numero de plazas debe ser 1 o mas");
@@ -167,7 +170,9 @@ public class Muelle {
 	}
 	
 	/**
-	 * 
+	 * Metodo que sirve para si un codigo de contenedor es correcto
+	 * @param codigo Codigo del contenedor que se comprueba
+	 * @throws IllegalArgumentException si el codigo es nulo o no corresponde a un codigo correcto
 	 */
 	private void comprobarCodigoContenedor(String codigo) {
 		if (codigo == null) throw new IllegalArgumentException("Codigo no puede ser nulo");
@@ -271,8 +276,9 @@ public class Muelle {
 	 *  1.1.11 Metodo para colocar un contenedor en una plaza y apilarlo si es posible
 	 * @param codigo Codigo del contenedor que queremos colocar
 	 * @param plaza La plaza del contenedor
-	 * @return Error si el contenedor ya esta apilado en ese muelle, si la plaza esta llena o si la plaza
-	 * no pertenece al muelle (una plaza mayor a las que hay o menor a 0)
+	 * @throws IllegalArgumentException si el contenedor es nulo, si la plaza esta fuera de rango, si ese contenedor ya esta apilado
+	 * Si ese contenedor essta en transito, si el contenedor donde se coloca encima no tiene techo o si la plaza 
+	 * esta llena
 	 */
 	public void colocarContenedorEnPlaza(Contenedor contenedor, int plaza) {
 		if (contenedor == null) throw new IllegalArgumentException("El Ccontenedor no puede ser nulo");
@@ -306,8 +312,8 @@ public class Muelle {
 	/**
 	 * 1.1.12 Metodo que sirve para sacar un contenedor de una Plaza y desapilarlo si es posible
 	 * @param contenedor: Contenedor a desapilar de la plaza
-	 * @return True si lo ha despilado, o false si no, ya que ese contenedor o no está en el muelle, o no se encuentra en la
-	 * ultima posicio apilada para poder sacarlo
+	 * @throws IllegalArgumentException si el contenedor es nulo, si no se encuentra apilado en ningun sitio o
+	 * si el contenedor no se encuentra en la ultima posicion (no se podria desapilar)
 	 */
 	
 	public void sacarContenedorDePlaza(Contenedor contenedor) {
@@ -335,6 +341,8 @@ public class Muelle {
 	 * Metodo que cambia el techo a un contenedor comprobando que este sea el ultimo de la plaza para evitar
 	 * problemas, ya que no se puede cambiar el techo a un contenedor que tenga apilado otro encima
 	 * @param contenedor Contenedor que se cambia el techo
+	 * @throws IllegalArgumentException si el contenedero es nulo, si el contenedor no se encuentra en la ultima
+	 * plaza (no se puede cambiar el techo) o si el contenedor no se encuentra en el muelle
 	 */
 	public void alternarTechoContenedor(Contenedor contenedor) {
 		if (contenedor == null) throw new IllegalArgumentException("El contenedor no puede ser nulo");
diff --git a/src/es/markse/Puerto.java b/src/es/markse/Puerto.java
index 70d26a58c8dd6ef10b4c1fa417ceaab37f7e92f1..833837916d6208629cde3f2094d185ccc85bcc3e 100644
--- a/src/es/markse/Puerto.java
+++ b/src/es/markse/Puerto.java
@@ -35,6 +35,8 @@ public class Puerto {
 	 * Metodo que comprueba si tanto el pais como la ciudad son correctos (2 y 3 letras respectivamente)
 	 * @param pais Pais del puerto (2 letras)
 	 * @param ciudad Ciudad del puerto(3 letras)
+	 * @throws IllegalArgumentException si el pais o la ciudad no corresponden con sus respectivos formatos o
+	 * cuando son nulos 
 	 */
 	private void comprobarIdentificador(String pais, String ciudad) {
 		if (pais == null || ciudad == null) {
@@ -49,6 +51,7 @@ public class Puerto {
 	 * 1.1.1. Metodo que agrega un nuevo muelle al puerto. Se comprueba que ese muelle no se encuentre ya agregado.
 	 * Si no lo esta, lo agrega, si ya se encuentra agregado, no.
 	 * @param m objeto tipo Muelle
+	 * @throws IllegalArgumentException si el muelle es nulo
 	 */
 	public boolean anyadirMuelle(Muelle m) {
 		if (m == null) throw new IllegalArgumentException("Muelle no puede ser nulo");
diff --git a/uses/es/markse/ContenedorTest.java b/uses/es/markse/ContenedorTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..2dd26f7135ef71310687353c3568cacc1e741efd
--- /dev/null
+++ b/uses/es/markse/ContenedorTest.java
@@ -0,0 +1,158 @@
+/**
+ * Copyright Universidad de Valladolid 2024/2025
+ */
+package es.markse;
+
+import static org.junit.Assert.*;
+import org.junit.Test;
+
+import es.uva.inf.poo.maps.GPSCoordinate;
+
+/**
+ * Implementacon de los Test para la clase Contenedor
+ * @author victorm
+ * @author javcalv
+ */
+public class ContenedorTest {
+
+	@Test
+	public void testContenedor() {
+		Contenedor c = new Contenedor("RTF", 'Z', "065432", 100, 400, 1000, false, true);
+		assertEquals("RTFZ0654328", c.getCodigo());
+		assertEquals(100.0f, c.obtenerPesoKilos(), 0.001f);
+		Contenedor c2 = new Contenedor("ABC", 'U', "123456", 200, 500, 1000, true, true);
+		assertEquals(500.0f, c2.cargaUtilContenedor(), 0.001f);
+		Contenedor c3 = new Contenedor("TOO", 'J', "123459", 200, 500, 1000, true, true);
+		assertEquals(1000f, c3.volumenEnMetrosCubicos(), 0.001f);
+		
+	}
+	
+	@Test(expected = IllegalArgumentException.class)
+	public void testContenedorCodigoDuenoNulo(){
+		new Contenedor(null, 'U', "123456", 200, 500, 1000, true, true);
+	}
+	
+	@Test(expected = IllegalArgumentException.class)
+	public void testContenedorCodigoDuenoInvalido(){
+		new Contenedor("e34", 'J', "123456", 200, 500, 1000, true, true);
+	}
+	
+	@Test(expected = IllegalArgumentException.class)
+	public void testContenedorCodigoDuenoTamanyoInvalido(){
+		new Contenedor("e34433", 'Z', "123456", 200, 500, 1000, true, true);
+	}
+	
+	@Test(expected = IllegalArgumentException.class)
+	public void testContenedorEquipamientoInvalido(){
+		new Contenedor("e34433", 'R', "123456", 200, 500, 1000, true, true);
+	}
+	
+	@Test(expected = IllegalArgumentException.class)
+	public void testContenedorEquipamientoInvalido_R(){
+	    new Contenedor("ABC", 'R', "123456", 200, 500, 1000, true, true);
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void testContenedorEquipamientoInvalido_X(){
+	    new Contenedor("DEF", 'X', "654321", 300, 600, 1200, false, false);
+	}
+	
+	@Test(expected = IllegalArgumentException.class)
+	public void testContenedorNumeroSerieNulo(){
+	    new Contenedor("DEF", 'J', null, 300, 600, 1200, false, false);
+	}
+	
+	@Test(expected = IllegalArgumentException.class)
+	public void testContenedorNumeroSerieLetras(){
+	    new Contenedor("DEF", 'J', "R450T0", 300, 600, 1200, false, false);
+	}
+	
+	@Test(expected = IllegalArgumentException.class)
+	public void testContenedorNumeroSerieInvalido(){
+	    new Contenedor("DEF", 'J', "59392020", 300, 600, 1200, false, false);
+	}
+	
+	@Test(expected = IllegalArgumentException.class)
+	public void testContenedorTaraMenorA1(){
+	    new Contenedor("DEF", 'J', "134567", 0, 600, 1200, false, false);
+	}
+	
+	@Test(expected = IllegalArgumentException.class)
+	public void testContenedorCargaMenorA1(){
+	    new Contenedor("DEF", 'J', "134567", 100, -4, 1200, false, false);
+	}
+	
+	@Test(expected = IllegalArgumentException.class)
+	public void testContenedorVolumenMenorA1(){
+	    new Contenedor("DEF", 'J', "134567", 100, 600, 0.5f, false, false);
+	}
+	
+	@Test
+	public final void testTieneTecho() {
+		Contenedor c = new Contenedor("RTF", 'Z', "065432", 100, 400, 1000, false, true);
+		Contenedor c2 = new Contenedor("ACC", 'Z', "493212", 100, 400, 1000, false, false);
+		assertTrue(c.tieneTecho());
+		assertFalse(c2.tieneTecho());
+	}
+	
+	@Test
+	public final void testCambiarEstadoARecogida() {
+		Contenedor c = new Contenedor("RTF", 'Z', "065432", 100, 400, 1000, true, true);
+		c.cambiarEstadoARecogida();
+		assertTrue(c.estadoRecogida());
+		assertFalse(c.estadoTransito());
+		Contenedor c2 = new Contenedor("RTT", 'Z', "555432", 100, 400, 1000, false, true);
+		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
+		Muelle m = new Muelle("01", cord, true, 2,2);
+		m.colocarContenedorEnPlaza(c2, 0);
+		assertFalse(c2.estadoRecogida());
+	}
+	
+	@Test(expected = IllegalArgumentException.class)
+	public final void testCambiarEstadoARecogidaContenedorApilado() {
+		Contenedor c = new Contenedor("RTF", 'Z', "065432", 100, 400, 1000, false, true);
+		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
+		Muelle m = new Muelle("01", cord, true, 2,2);
+		m.colocarContenedorEnPlaza(c, 0);
+		c.cambiarEstadoARecogida();
+	}
+	
+	@Test
+	public final void testCambiarEstadoATransito() {
+		Contenedor c = new Contenedor("RTT", 'Z', "555432", 100, 400, 1000, false, true);
+		assertFalse(c.estadoTransito());
+		c.cambiarEstadoATransito();
+		assertTrue(c.estadoTransito());
+	}
+	
+	@Test (expected = IllegalArgumentException.class)
+	public final void testCambiarEstadoATransitoContenedorApilado() {
+		Contenedor c = new Contenedor("RTF", 'Z', "065432", 100, 400, 1000, false, true);
+		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
+		Muelle m = new Muelle("01", cord, true, 2,2);
+		assertFalse(c.estadoTransito());
+		m.colocarContenedorEnPlaza(c, 1);
+		assertFalse(c.estadoTransito());
+		c.cambiarEstadoATransito();
+	}
+	
+
+	@Test
+	public void testVolumenEnPiesCubicos() {
+		Contenedor c = new Contenedor("RTF", 'Z', "065432", 100, 400, 1000, false, true);
+		assertEquals(1000*35.3147f, c.volumenEnPiesCubicos(), 0.001f);
+	}
+
+	@Test
+	public void testObtenerPesoLibras() {
+		Contenedor c = new Contenedor("RTF", 'Z', "065432", 100, 400, 1000, false, true);
+		assertEquals(100*2.20462f, c.obtenerPesoLibras(), 0.001f);
+	}
+	
+	/*
+	@Test
+	public void testAnyadirTrayecto() {
+		fail("Not yet implemented"); // TODO
+	}
+	*/
+}
diff --git a/uses/es/markse/PuertoTest.java b/uses/es/markse/PuertoTest.java
index 281c5630212c4f8f1bc758e0e97e5d60cd6f4495..f2f0c482730b0cc07f10d697a495504adca60c21 100644
--- a/uses/es/markse/PuertoTest.java
+++ b/uses/es/markse/PuertoTest.java
@@ -62,7 +62,7 @@ public class PuertoTest {
 	@Test(expected = IllegalArgumentException.class)
 	public void testAnyadirMuelleNulo() {
 		Puerto p = new Puerto("ES","BAR");
-		assertTrue(p.anyadirMuelle(null));
+		p.anyadirMuelle(null);
 	}