\newpage
\subsection{Práctica}

\begin{itemize}
	\item Practicando un poco más: \texttt{05\_BinarySearch}
	\begin{itemize}
		\item Recordemos: luz roja, luz verde, refactorizar
		\item No tenemos por qué hacer la mejor solución a la primera :-)
	\end{itemize}
	\item Y otro poco más:
	\begin{itemize}
		\item Utilizando librerías externas: \texttt{06\_LibreriaExterna}
		\item Tenemos una librería eterna llamada \emph{LibreriaPuertoSerie}:
		\begin{itemize}
			\item Queremos testear la funcionalidad de la clase \emph{UsandoLibreriaExterna}
			\item Esta clase depende de LibreriaPuertoSerie
			\item ¿Cómo testeamos esta funcionalidad?
			\item Solución en \texttt{07\_LibreriaExternaSolucion}
		\end{itemize}
	\end{itemize}
	\item Problemas normales a la hora de testear:
	\begin{itemize}
		\item Código \emph{viejo}:
		\begin{itemize}
			\item Al testear código que no está desarrollado con tests en mente, es común encontrar código \emph{muy acoplado}, que es difícil de testear
			\item Casi sin darnos cuenta, vemos enseguida resultados al comparar cómo nos queda ahora el código y cómo nos quedaba antes
		\end{itemize}
		\item Capas que puede costar testear:
		\begin{itemize}
			\item GUIs\ldots
			\item Objetos remotos\ldots
			\item Bases de datos\ldots
			\item Threading\ldots
		\end{itemize}
		\item Ejemplo: aplicación que tiene un interfaz de usuario y finalmente utiliza bases de datos y hardware
		\begin{itemize}
			\item Podríamos por ejemplo hacer tests unitarios de cada parte del proyecto
			\begin{itemize}
				\item Wrapeando la parte de más bajo nivel (que tenga relación directa con hardware)
				\item Diseñando todo el interfaz de usuario encima de un Service Layer, y testeando todos los módulos desde Service Layer abajo
			\end{itemize}
			\item Luego, hacemos tests de integración
			\begin{itemize}
				\item No comprueban todo, sino la comunicación entre los interfaces de los diferentes objetos
				\item Pueden hablar desde arriba del todo (ServiceLayer) hasta abajo del todo (wrapeando una vez más el hardware)
			\end{itemize}
			\item Si el GUI se apoya sobre un Service Layer testeado, no debería costar mucho probar ``manualmente'' el GUI, que es lo único que no se ha comprobado
		\end{itemize}
	\end{itemize}
\end{itemize}

