\newpage
\subsection{Introducción a JUnit}

\begin{itemize}
	\item xUnit
	\begin{itemize}
		\item Muchas plataformas de pruebas unitarias utilizan una arquitectura denominada \emph{xUnit}
		\begin{itemize}
			\item Primera implementación $\rightarrow$ SUnit (Smalltalk), por Kent Beck (cocreador de Extreme Programming)
		\end{itemize}
		\item Esta arquitectura informal define una serie de métodos y estructuras que cada implementación de cada lenguaje adapta al lenguaje
		\begin{itemize}
			\item JUnit para Java
			\item csUnit y NUnit para .NET
			\item PyUnit para Python
			\item \href{http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks}{Y muchos más}\ldots
		\end{itemize}
		\item Relación con Test Driven Development:
		\begin{itemize}
			\item Test Driven Development utiliza plataformas de pruebas unitarias
			\item Algunas de estas plataformas son compatibles con xUnit
			\item Test Driven Development podría utilizar otras plataformas $\rightarrow$ \emph{aplicar TDD no exige utilizar xUnit}
			\item Y se puede utilizar xUnit sin utilizar sólo para hacer pruebas $\rightarrow$ \emph{utilizar xUnit no es aplicar TDD}
		\end{itemize}
	\end{itemize}
	\item JUnit
	\begin{itemize}
		\item Conceptos básicos:
		\begin{itemize}
			\item \emph{Test Fixtures} $\rightarrow$ Precondiciones que un test necesita
			\begin{itemize}
				\item Tendremos un método \emph{setUp} que inicialice estas precondiciones
				\subitem En JUnit 4 $\rightarrow$ basta con anotarlo con \texttt{Before}
				\item Tendremos un método \emph{tearDown} que limpie lo que se ha creado en los tests
				\subitem En JUnit 4 $\rightarrow$ basta con anotarlo con \texttt{After}
			\end{itemize}
			\item \emph{Test Suites} $\rightarrow$ Conjunto de tests que tienen el mismo \emph{Test Fixture} y comparten una lógica común
			\begin{itemize}
				\item Tendremos una clase que tendrá su \emph{Test Fixture} y sus tests
				\subitem En JUnit anterior a 4, esta clase heredaba de \texttt{TestCase}
			\end{itemize}
			\item \emph{Tests} $\rightarrow$ Los tests en sí, lanzan los métodos que se están comprobando, y se comprueban los resultados
			\begin{itemize}
				\item Anotados con @Test en JUnit 4, normalmente empiezan por \emph{test\ldots}
				\item Se comprueba con diferentes asertos (métodos estáticos de la clase Assert en JUnit 4)
				\subitem assertEquals(expected, actual), assertTrue(condition), (expected=EjemploException.class)\ldots
			\end{itemize}
		\end{itemize}
		\item Ejemplo: \texttt{01\_Acumulador}
		\item Ejercicio: \texttt{04\_Calculadora}
	\end{itemize}
\end{itemize}

