diff --git a/src/es/markse/Contenedor.java b/src/es/markse/Contenedor.java
index 83322f170d4a87ead6640c89da8cf6dc53182253..eb362d16586a22ee246f15ff45e67443a882ad6d 100644
--- a/src/es/markse/Contenedor.java
+++ b/src/es/markse/Contenedor.java
@@ -18,8 +18,9 @@ public class Contenedor {
 	private float volumen;
 	private boolean techo;
 	private List<Trayecto> trayectos = new ArrayList<>();
-	private boolean recogida = false;
-	private boolean transito = false;
+	private boolean recogida;
+	private boolean transito;
+	private boolean apilado = false;
 	
 	/**
 	 * Constructor del Objeto Contenedor
@@ -36,14 +37,13 @@ public class Contenedor {
 		validarCodigoDueno(codigoDueno.toUpperCase());
         validarEquipamiento(equipamiento);
         validarNumeroSerie(numeroSerie);
-		
 		this.pesoTara = pesoContenedor;
 		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;
 	}
 	
@@ -53,7 +53,7 @@ public class Contenedor {
 	 * @throws Devuelve una excepcion si no coincide con el patron
 	 */
 	private void validarCodigoDueno(String codigoDueno) {
-	        if (codigoDueno.length() != 3 || !codigoDueno.matches("[A-Z]{3}")) {
+	        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.");
 	        }
 	    }
@@ -118,20 +118,44 @@ 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
 	 */
 	public void cambiarEstadoARecogida() {
-		this.recogida = true;
-		this.transito = false;
+		if(!this.estadoApilado()) {
+			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
 	 */
 	public void cambiarEstadoATransito() {
-		this.transito = true;
+		if (!this.estadoApilado()) {
+			this.transito = true;
+			this.recogida = false;
+		}
+	}
+	
+	/**
+	 * Metodo para cambiar estado a apilado
+	 */
+	public void cambiarEstadoApilado() {
+		this.apilado = true;
+		this.transito = false;
 		this.recogida = false;
 	}
 	
+	/**
+	 * Metodo para cmabiar el estado de apilado --> recogida
+	 */
+	public void cambiarEstadoDesapilado() {
+		this.apilado = false;
+		this.recogida = true;
+	}
+	
 	/**
 	 * 1.1.15 Metodo que cambia un contenedor que no tenga techo a que lo tenga, y al contrario
 	 */
@@ -203,6 +227,14 @@ public class Contenedor {
 	public boolean estadoTransito() {
 		return this.transito;
 	}
+	
+	/**
+	 * Metodo que devuelve el estado de apilamiento de un contenedor
+	 * @return estado de apilamiento de un contenedor
+	 */
+	public boolean estadoApilado() {
+		return this.apilado;
+	}
 
 	//REALIZAR EL METODO PARA CALCULAR LOS TRAYECTOS
 }
\ No newline at end of file
diff --git a/src/es/markse/Muelle.java b/src/es/markse/Muelle.java
index 96a24cd9cd41b406c4130ac07c5466ab5fd20558..7338a191adda1197baca7e1ffab8c6728137959a 100644
--- a/src/es/markse/Muelle.java
+++ b/src/es/markse/Muelle.java
@@ -70,8 +70,7 @@ public class Muelle {
 		        return false;
 		    }
 		    if (this.contenedores.isEmpty() || this.ultimoContenedor().tieneTecho()) {
-		        this.contenedores.add(contenedor);
-		        return true;
+		        return this.contenedores.add(contenedor);
 		    }
 		    return false;
 		}
@@ -83,7 +82,7 @@ public class Muelle {
 		 * @return true si es el ultimo o false si no lo es.
 		 */
 		public boolean estaEnUltimoNivel(String codigoContenedor) {
-		    return !this.contenedores.isEmpty() && this.ultimoContenedor().getCodigo().equals(codigoContenedor);
+		    return this.ultimoContenedor().getCodigo().equals(codigoContenedor);
 		}
 
 		/**
@@ -279,11 +278,20 @@ public class Muelle {
 		if (contenedor == null) throw new IllegalArgumentException("El Ccontenedor no puede ser nulo");
 		if (plaza < 0 || plaza > this.numeroDePlazasTotales()) throw new 
 			IllegalArgumentException("La plaza debe de estar entre 0-"+ (this.plazas.length -1));
+		//Si ya esta apilado
+		if (contenedor.estadoApilado()) {
+			throw new IllegalArgumentException("El Contenedor ya esta apilado");
+		}
+		//Si esta entransito
+		if (contenedor.estadoTransito()) {
+			throw new IllegalArgumentException("El Contenedor esta en transito, no se puede colocar");
+		}
 		
 	    Contenedor ultimo = this.plazas[plaza].ultimoContenedor();
 	    // Verificar si hay un último contenedor y si tiene techo
 	    boolean teniaTecho = (ultimo != null && ultimo.tieneTecho());
 	    if (this.plazas[plaza].colocarContenedor(contenedor)) {
+	    	contenedor.cambiarEstadoApilado();
 	        int plazasDespues = this.plazas[plaza].numeroContenedores();
 	        int plazasAntes = plazasDespues - 1;
 	        this.actualizarPlazas(plazasAntes, plazasDespues, this.plazas[plaza], teniaTecho);
@@ -304,14 +312,22 @@ public class Muelle {
 	
 	public void sacarContenedorDePlaza(Contenedor contenedor) {
 		if (contenedor == null) throw new IllegalArgumentException("El Ccontenedor no puede ser nulo");
-	    for (Plaza plaza : this.plazas) {
-	        if (plaza.numeroContenedores() != 0 && plaza.estaEnUltimoNivel(contenedor.getCodigo())) {
-	        	int plazasAntes = plaza.numeroContenedores();
-	        	boolean teniaTecho = plaza.ultimoContenedor().tieneTecho(); //Ver si el contenedor que quitamos tenia techo o no
-	        	plaza.desapilarContenedor();
-	        	int plazasDespues = plaza.numeroContenedores();
-	        	this.actualizarPlazas(plazasAntes, plazasDespues, plaza, teniaTecho);
-	        }
+		if (!contenedor.estadoApilado()) throw new IllegalArgumentException("El Contenedor no esta en ninguna plaza. Se encuentra en transito o en recogida");
+	    
+		for (Plaza plaza : this.plazas) {
+			if (plaza.contieneContenedor(contenedor.getCodigo())) {
+		        if (plaza.estaEnUltimoNivel(contenedor.getCodigo())) {
+		        	int plazasAntes = plaza.numeroContenedores();
+		        	boolean teniaTecho = plaza.ultimoContenedor().tieneTecho();
+		        	plaza.desapilarContenedor();
+		        	contenedor.cambiarEstadoDesapilado();
+		        	int plazasDespues = plaza.numeroContenedores();
+		        	this.actualizarPlazas(plazasAntes, plazasDespues, plaza, teniaTecho);
+		        }
+		        else {
+		        	throw new IllegalArgumentException("El Contenedor No esta en el ultimo nivel");
+		        }
+			}
 	    }
 	}
 	
@@ -339,7 +355,8 @@ public class Muelle {
 						}
 						//Si ahora no lo tiene, las llenas son una mas y semillenas uno menos
 						else { 
-							this.plazasLlenas++; this.plazasSemillenas--;
+							this.plazasLlenas++; 
+							this.plazasSemillenas--;
 						}
 					}
 				}
@@ -377,19 +394,27 @@ public class Muelle {
 	    	//Plaza queda vacia
 	        if (esVacio) {
 	            if (alturaMaxima == 1 || !teniaTecho) {
-	                plazasLlenas--;
-	                plazasVacias++;
+	                this.plazasLlenas--;
+	                this.plazasVacias++;
 	            } 
 	            else {
-	                plazasSemillenas--;
-	                plazasVacias++;
+	                this.plazasSemillenas--;
+	                this.plazasVacias++;
 	            }
 	        }
+	        //Se queda con el penultimo contenedor
+	        else if (esPenultimoContenedor) {
+	        	this.plazasLlenas--;
+	        	this.plazasSemillenas++;
+	        }
 	        
-	        //Se queda con el penultimo contenedor o con otro cuando el anterior no tenia techo
-	        else if (esPenultimoContenedor || (!teniaTecho && plazasDespues < alturaMaxima)) {
-	            plazasLlenas--;
-	            plazasSemillenas++;
+	        //Se elimina un contenedor que no sea ni el primero ni el ultimo
+	        else {
+	        	//Si el contenedor eliminado tenia no techo Llenas a Semillenas
+	        	if (!teniaTecho) {
+	        		this.plazasLlenas--;
+	        		this.plazasSemillenas++;
+	        	}
 	        }
 	        
 	    }
diff --git a/uses/es/markse/MuelleTest.java b/uses/es/markse/MuelleTest.java
index 5d0ce309eb9505be3405e0ed142c7138a859a01d..e3196831a7b8069cbb783981053f9106c5146d02 100644
--- a/uses/es/markse/MuelleTest.java
+++ b/uses/es/markse/MuelleTest.java
@@ -18,7 +18,7 @@ import es.uva.inf.poo.maps.GPSCoordinate;
 public class MuelleTest {
 	
 	@Test
-	public final void testMuelle() {
+	public void testMuelle() {
 		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
 		Muelle m = new Muelle("01", cord, true, 2,2);
 		assertEquals("01", m.getIdentificador());
@@ -28,37 +28,43 @@ public class MuelleTest {
 	}
 	
 	@Test(expected = IllegalArgumentException.class)
-	public final void testMuelleIdentificadorVacio() {
+	public void testMuelleIdentificadorVacio() {
 		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
 		new Muelle(null, cord, true, 2,2);
 	}
 	
 	@Test(expected = IllegalArgumentException.class)
-	public final void testMuelleGPSVacio() {
+	public void testMuelleGPSVacio() {
 		new Muelle("04", null, true, 2,2);
 	}
 	
 	@Test(expected = IllegalArgumentException.class)
-	public final void testMuelleIdentificadorInalido() {
+	public void testMuelleIdentificadorInvalido() {
 		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
 		new Muelle("r3", cord, true, 2,2);
 	}
 	
 	@Test(expected = IllegalArgumentException.class)
-	public final void testMuellePlazasInvalida() {
+	public void testMuelleIdentificadorInvalidoTamanyo() {
+		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
+		new Muelle("r432432", cord, true, 2,2);
+	}
+	
+	@Test(expected = IllegalArgumentException.class)
+	public void testMuellePlazasInvalida() {
 		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
 		new Muelle("12", cord, true, -3,2);
 	}
 	
 	@Test(expected = IllegalArgumentException.class)
-	public final void testMuelleAlturaInvalida() {
+	public void testMuelleAlturaInvalida() {
 		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
 		new Muelle("12", cord, true, 1,-2);
 	}
 	
 	
 	@Test
-	public final void testGetIdentificador() {
+	public void testGetIdentificador() {
 		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
 		Muelle m = new Muelle("01", cord, true, 2,2);
 		assertEquals("01", m.getIdentificador());
@@ -66,7 +72,7 @@ public class MuelleTest {
 
 
 	@Test
-	public final void testEstaOperativo() {
+	public void testEstaOperativo() {
 		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
 		Muelle m1 = new Muelle("01", cord, true, 2,2);
 		Muelle m2 = new Muelle("02", cord, false, 2,2);
@@ -76,7 +82,7 @@ public class MuelleTest {
 	
 	
 	@Test
-	public final void testGetGPSCoordinate() {
+	public void testGetGPSCoordinate() {
 		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
 		Muelle m = new Muelle("01", cord, true, 2,2);
 		assertEquals(cord, m.getGPSCoordinate());
@@ -84,7 +90,7 @@ public class MuelleTest {
 	
 	
 	@Test
-	public final void testNumeroDePlazasTotales() {
+	public void testNumeroDePlazasTotales() {
 		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
 		Muelle m = new Muelle("01", cord, true, 2,2);
 		assertEquals(2,m.numeroDePlazasTotales());
@@ -92,11 +98,9 @@ public class MuelleTest {
 	
 
 	@Test
-	public final void testPlazasVacias() {
-		Puerto p = new Puerto("ES","BAR");
+	public void testPlazasVacias() {
 		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
 		Muelle m = new Muelle("01", cord, true, 2,1);
-		p.anyadirMuelle(m);
 		assertEquals(2, m.plazasVacias());
 		Contenedor c = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true);
 		Contenedor c2 = new Contenedor("TRR", 'J', "056731", 100, 400, 500, false, true);
@@ -109,7 +113,7 @@ public class MuelleTest {
 	}
 	
 	@Test
-	public final void testPlazasLlenas() {
+	public void testPlazasLlenas() {
 		Puerto p = new Puerto("ES","BAR");
 		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
 		Muelle m = new Muelle("01", cord, true, 1,2);
@@ -123,11 +127,9 @@ public class MuelleTest {
 	}
 	
 	@Test
-	public final void testPlazasSemillenas() {
-		Puerto p = new Puerto("ES","BAR");
+	public void testPlazasSemillenas() {
 		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
 		Muelle m = new Muelle("01", cord, true, 1,2);
-		p.anyadirMuelle(m);
 		assertEquals(0, m.plazasSemillenas());
 		Contenedor c = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true);
 		Contenedor c2 = new Contenedor("TRR", 'J', "056731", 100, 400, 500, false, true);
@@ -142,11 +144,9 @@ public class MuelleTest {
 	}
 	
 	@Test
-	public final void testPlazaActual() {
-		Puerto p = new Puerto("ES","BAR");
+	public void testPlazaActual() {
 		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
 		Muelle m = new Muelle("01", cord, true, 10,2);
-		p.anyadirMuelle(m);
 		Contenedor c = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true);
 		m.colocarContenedorEnPlaza(c, 4);
 		assertEquals(4, m.plazaActual(c.getCodigo()));
@@ -154,14 +154,14 @@ public class MuelleTest {
 	}
 	
 	@Test(expected = IllegalArgumentException.class)
-	public final void testPlazaActualCodigoInvalido() {
+	public void testPlazaActualCodigoInvalido() {
 		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
 		Muelle m = new Muelle("01", cord, true, 10,2);
 		m.plazaActual("HOLA");
 	}
 	
 	@Test(expected = IllegalArgumentException.class)
-	public final void testPlazaActualCodigoNulo() {
+	public void testPlazaActualCodigoNulo() {
 		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
 		Muelle m = new Muelle("01", cord, true, 10,2);
 		m.plazaActual(null);
@@ -169,11 +169,9 @@ public class MuelleTest {
 	
 	
 	@Test
-	public final void testNivelEnPlaza() {
-		Puerto p = new Puerto("ES","BAR");
+	public void testNivelEnPlaza() {
 		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
 		Muelle m = new Muelle("01", cord, true, 10,2);
-		p.anyadirMuelle(m);
 		Contenedor c = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true);
 		Contenedor c2 = new Contenedor("ZEX", 'Z', "666731", 100, 400, 500, false, true);
 		m.colocarContenedorEnPlaza(c, 4);
@@ -184,38 +182,212 @@ public class MuelleTest {
 	}
 	
 	@Test(expected = IllegalArgumentException.class)
-	public final void testNivelEnPlazaCodigoInvalido() {
+	public void testNivelEnPlazaCodigoInvalido() {
 		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
 		Muelle m = new Muelle("01", cord, true, 10,2);
 		m.nivelEnPlaza("HOLA");
 	}
 	
 	@Test(expected = IllegalArgumentException.class)
-	public final void testNivelEnPlazaCodigoNulo() {
+	public void testNivelEnPlazaCodigoNulo() {
 		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
 		Muelle m = new Muelle("01", cord, true, 10,2);
 		m.nivelEnPlaza(null);
 	}
 	
-	/*
 	@Test
-	public final void testColocarContenedorEnPlaza() {
+	public void testColocarContenedorEnPlaza() {
+		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
+		Muelle m = new Muelle("01", cord, true, 2,1);
+		Contenedor c = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true);
+		Contenedor c2 = new Contenedor("ZEX", 'Z', "666731", 100, 400, 500, false, true);
+		m.colocarContenedorEnPlaza(c, 0);
+		m.colocarContenedorEnPlaza(c2, 1);
 	}
 
-
+	@Test(expected = IllegalArgumentException.class)
+	public void testColocarContenedorEnPlazaContenedorVacio() {
+		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
+		Muelle m = new Muelle("01", cord, true, 2,1);
+		m.colocarContenedorEnPlaza(null, 0);
+	}
+	
+	@Test(expected = IllegalArgumentException.class)
+	public void testColocarContenedorEnPlazaFueraRango() {
+		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
+		Contenedor c = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true);
+		Muelle m = new Muelle("01", cord, true, 2,1);
+		m.colocarContenedorEnPlaza(c, 13);
+	}
+	
+	@Test(expected = IllegalArgumentException.class)
+	public void testColocarContenedorEnPlazaFueraRangoAbajo() {
+		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
+		Contenedor c = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true);
+		Muelle m = new Muelle("01", cord, true, 2,1);
+		m.colocarContenedorEnPlaza(c, -2);
+	}
+	
+	@Test(expected = IllegalArgumentException.class)
+	public void testColocarContenedorYaApilado() {
+		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
+		Contenedor c = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true);
+		Muelle m = new Muelle("01", cord, true, 2,1);
+		m.colocarContenedorEnPlaza(c, 0);
+		m.colocarContenedorEnPlaza(c, 1);
+	}
+	
+	@Test(expected = IllegalArgumentException.class)
+	public void testColocarContenedorEnTransito() {
+		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
+		Contenedor c = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true);
+		Muelle m = new Muelle("01", cord, true, 2,1);
+		c.cambiarEstadoATransito();
+		m.colocarContenedorEnPlaza(c, 0);
+	}
+	
+	@Test(expected = IllegalArgumentException.class)
+	public void testColocarContenedorEncimaDeUnoSinTecho() {
+		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
+		Contenedor c = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, false);
+		Muelle m = new Muelle("01", cord, true, 1,2);
+		m.colocarContenedorEnPlaza(c, 0);
+		Contenedor c2 = new Contenedor("ZTG", 'J', "582940", 100, 400, 500, false, false);
+		m.colocarContenedorEnPlaza(c2, 0);
+	}
+	
+	@Test(expected = IllegalArgumentException.class)
+	public void testColocarContenedorEnPlazaLLena() {
+		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
+		Contenedor c = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true);
+		Muelle m = new Muelle("01", cord, true, 1,1);
+		m.colocarContenedorEnPlaza(c, 0);
+		Contenedor c2 = new Contenedor("ZTG", 'J', "582940", 100, 400, 500, false, true);
+		m.colocarContenedorEnPlaza(c2, 0);
+	}
+	
+	@Test(expected = IllegalArgumentException.class)
+	public void testColocarContenedorEnDosMuelles() {
+		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
+		Contenedor c = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true);
+		Muelle m = new Muelle("01", cord, true, 1,1);
+		Muelle m2 = new Muelle("01", cord, true, 1,1);
+		m.colocarContenedorEnPlaza(c, 0);
+		m2.colocarContenedorEnPlaza(c, 0);	
+	}
+	
 	@Test
-	public final void testSacarContenedorDePlaza() {
-		fail("Not yet implemented"); // TODO
+	public void testSacarContenedorDePlaza() {
+		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
+		Contenedor c = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true);
+		Muelle m = new Muelle("01", cord, true, 1,1);
+		m.colocarContenedorEnPlaza(c, 0);
+		m.sacarContenedorDePlaza(c);
 	}
-
+	
+	@Test(expected = IllegalArgumentException.class)
+	public void testSacarContenedorDePlazaQueNoEstaEnUltimoNivel() {
+		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
+		Contenedor c = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true);
+		Contenedor c2 = new Contenedor("RJF", 'Z', "401932", 100, 400, 500, false, true);
+		Muelle m = new Muelle("01", cord, true, 1,2);
+		m.colocarContenedorEnPlaza(c, 0);
+		m.colocarContenedorEnPlaza(c2, 0);
+		m.sacarContenedorDePlaza(c);
+	}
+	
+	@Test(expected = IllegalArgumentException.class)
+	public void testSacarContenedorDePlazaContenedorVacio() {
+		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
+		Muelle m = new Muelle("01", cord, true, 1,1);
+		m.sacarContenedorDePlaza(null);
+	}
+	
+	@Test(expected = IllegalArgumentException.class)
+	public void testSacarContenedorDePlazaQueNoEstaApilado() {
+		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
+		Contenedor c = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true);
+		Muelle m = new Muelle("01", cord, true, 1,1);
+		m.sacarContenedorDePlaza(c);
+	}
+	
 	@Test
-	public final void testAlternarTechoContenedor() {
-		fail("Not yet implemented"); // TODO
+	public void testAlternarTechoContenedor() {
+		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
+		Contenedor c = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true);
+		Muelle m = new Muelle("01", cord, true, 2,2);
+		m.colocarContenedorEnPlaza(c, 0);
+		m.alternarTechoContenedor(c);
+		Contenedor c2 = new Contenedor("XCD", 'J', "401941", 100, 400, 500, false, true);
+		Contenedor c3 = new Contenedor("RTR", 'J', "405012", 100, 400, 500, false, true);
+		m.colocarContenedorEnPlaza(c2, 1);
+		m.colocarContenedorEnPlaza(c3, 1);
+		m.alternarTechoContenedor(c3);
 	}
-
+	
+	@Test(expected = IllegalArgumentException.class)
+	public void testAlternarTechoContenedorVacio() {
+		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
+		Muelle m = new Muelle("01", cord, true, 1,2);
+		m.alternarTechoContenedor(null);
+	}
+	
+	@Test(expected = IllegalArgumentException.class)
+	public void testAlternarTechoContenedorQueNoEsta() {
+		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
+		Muelle m = new Muelle("01", cord, true, 1,2);
+		Contenedor c = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true);
+		m.alternarTechoContenedor(c);
+	}
+	
+	@Test(expected = IllegalArgumentException.class)
+	public void testAlternarTechoContenedorQueNoEstaEnUltimaPlaza() {
+		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
+		Muelle m = new Muelle("01", cord, true, 1,2);
+		Contenedor c = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, true);
+		Contenedor c2 = new Contenedor("EWE", 'J', "456321", 100, 400, 500, false, true);
+		m.colocarContenedorEnPlaza(c, 0);
+		m.colocarContenedorEnPlaza(c2, 0);
+		m.alternarTechoContenedor(c);
+	}
+	
+	@Test
+	public void testAlternarOperativo() {
+		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
+		Muelle m = new Muelle("01", cord, true, 1,2);
+		m.alternarOperativo();
+		assertFalse(m.estaOperativo());
+		m.alternarOperativo();
+		assertTrue(m.estaOperativo());
+	}
+	
 	@Test
-	public final void testAlternarOperativo() {
-		fail("Not yet implemented"); // TODO
+	public void testGestionPlazasGeneral() {
+		GPSCoordinate cord = new GPSCoordinate(5d, 5d);
+		Muelle m = new Muelle("01", cord, true, 1,3);
+		Muelle m2 = new Muelle("01", cord, true, 1,2);
+		Muelle m3 = new Muelle("01", cord, true, 1,1);
+		Contenedor c = new Contenedor("DFR", 'J', "056731", 100, 400, 500, false, false);
+		Contenedor c2 = new Contenedor("ZZE", 'J', "056731", 100, 400, 500, false, true);
+		Contenedor c3 = new Contenedor("ZRE", 'J', "056731", 100, 400, 500, false, false);
+		Contenedor c4 = new Contenedor("ZRR", 'J', "432422", 100, 400, 500, false, true);
+		m.colocarContenedorEnPlaza(c, 0);
+		assertEquals(0, m.plazasVacias(), m.plazasSemillenas());
+		m.sacarContenedorDePlaza(c);
+		assertEquals(1, m.plazasVacias());
+		assertEquals(0, m.plazasSemillenas());
+		m2.colocarContenedorEnPlaza(c2, 0);
+		m2.colocarContenedorEnPlaza(c3, 0);
+		m2.sacarContenedorDePlaza(c3);
+		assertEquals(1, m2.plazasSemillenas());
+		m2.sacarContenedorDePlaza(c2);
+		assertEquals(0, m2.plazasSemillenas(), m2.plazasLlenas());
+		m.colocarContenedorEnPlaza(c2, 0);
+		m.colocarContenedorEnPlaza(c, 0);
+		assertEquals(0, m.plazasVacias(), m.plazasSemillenas());
+		m.sacarContenedorDePlaza(c);
+		m.colocarContenedorEnPlaza(c4, 0);
+		assertEquals(1, m.plazasSemillenas());
+		m.sacarContenedorDePlaza(c4);
 	}
-	*/
 }