<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>https://dosideas.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cbbarbie</id>
		<title>Dos Ideas. - Contribuciones del usuario [es]</title>
		<link rel="self" type="application/atom+xml" href="https://dosideas.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cbbarbie"/>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/Especial:Contribuciones/Cbbarbie"/>
		<updated>2026-05-05T09:42:28Z</updated>
		<subtitle>Contribuciones del usuario</subtitle>
		<generator>MediaWiki 1.28.2</generator>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Desarrollo_De_Software&amp;diff=6446</id>
		<title>Desarrollo De Software</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Desarrollo_De_Software&amp;diff=6446"/>
				<updated>2011-12-16T13:42:29Z</updated>
		
		<summary type="html">&lt;p&gt;Cbbarbie: /* Ver también */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;El desarrollo de software involucra no sólo el uso de [[Metodologias De Desarrollo]], sino la aplicación de tecnologías de desarrollo y testing para asegurar la calidad del producto.&lt;br /&gt;
&lt;br /&gt;
== Libros ==&lt;br /&gt;
* [[Libros]]&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
* [[HTML]]&lt;br /&gt;
* [[Javascript]]&lt;br /&gt;
* [[Java]]&lt;br /&gt;
* [[Diseño De Software]]&lt;br /&gt;
* [[Patrones]]&lt;br /&gt;
* [[Testing De Aplicaciones]]&lt;br /&gt;
* [[Base De Datos]]&lt;br /&gt;
* [[Herramientas Para Gestion De Calidad]]&lt;br /&gt;
* [[Performance De Aplicaciones]]&lt;/div&gt;</summary>
		<author><name>Cbbarbie</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Mockito&amp;diff=6424</id>
		<title>Mockito</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Mockito&amp;diff=6424"/>
				<updated>2011-10-13T14:28:14Z</updated>
		
		<summary type="html">&lt;p&gt;Cbbarbie: /* Otra manera de invocar a un metodo privado (Bypass encapsulation) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mockito es una librería [[Java]] para la creación de [[Mock Object]] muy usados para el testeo unitario en [[Test Driven Development]], basado en [[EasyMock]]. &lt;br /&gt;
&lt;br /&gt;
Mockito fue creado con el objetivo de simplificar y solucionar algunos de los temas antes mencionados. EasyMock y Mockito puede hacer exactamente las mismas cosas, pero Mockito tiene un API más natural y práctico de usar.&lt;br /&gt;
&lt;br /&gt;
==Características principales==&lt;br /&gt;
# Se pueden crear mocks de interfaces y clases concretas.&lt;br /&gt;
# Verificación de invocaciones (cantidad exacta, al menos una vez, órden de invocación, etc.)&lt;br /&gt;
# El stack trace se mantiene limpio, ya que los errores ocurren en los assert que se hagan (y no dentro del método bajo prueba, como en EasyMock).&lt;br /&gt;
# Un API más clara para crear stubs y verificaciones&lt;br /&gt;
&lt;br /&gt;
==Ejemplo de uso==&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
import static org.mockito.Mockito.*;&lt;br /&gt;
.....&lt;br /&gt;
//creamos el mock y el stub&lt;br /&gt;
ArrayList instance = mock(ArrayList.class);&lt;br /&gt;
doReturn(&amp;quot;hola mundo&amp;quot;).when(instance).get(0);&lt;br /&gt;
 &lt;br /&gt;
//ejecutamos la lógica a probar&lt;br /&gt;
instance.get(0);     &lt;br /&gt;
 &lt;br /&gt;
//verificamos que se hayan invocado los métodos&lt;br /&gt;
verify(instance).get(0);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Más de una invocación a un mismo método==&lt;br /&gt;
&lt;br /&gt;
Algunas veces necesitamos que un método retorne un valor y que en la segunda invocación retorne nulo o una excepción. Para eso, anidamos los retornos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code html4strict&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//Retornos para las 2 invocaciones&lt;br /&gt;
doReturn(&amp;quot;algo&amp;quot;).doReturn(null).when(instance).scrollNext();&lt;br /&gt;
&lt;br /&gt;
//ejecutamos la lógica a probar&lt;br /&gt;
instance.unMetodoQueUsaScroll();     &lt;br /&gt;
&lt;br /&gt;
//verificamos que se haya invocado el mismo método dos veces&lt;br /&gt;
verify(instance, times(2)).scrollNext();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [http://mockito.googlecode.com/svn/branches/1.5/javadoc/org/mockito/Mockito.html Leer más en Mockito API]&lt;br /&gt;
&lt;br /&gt;
==Ejemplos de Mockito junto a PowerMock==&lt;br /&gt;
&lt;br /&gt;
===Invocación a un método estático===&lt;br /&gt;
&lt;br /&gt;
Para mockear métodos estáticos, según el [http://code.google.com/p/mockito/wiki/FAQ FAQ] de mockito, esto no es posible. Pero nombra 2 framewors que pueden resultarnos útil [http://jmockit.dev.java.net/ JMockit] y [http://code.google.com/p/powermock PowerMock]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@RunWith(PowerMockRunner.class)&lt;br /&gt;
@PrepareForTest(ClaseConMetodosEstaticos.class)&lt;br /&gt;
public class DosIdeasTestCase {&lt;br /&gt;
    @Test&lt;br /&gt;
    public void testMetodo_conInvocacionAMetodosEstaticos() {&lt;br /&gt;
	&lt;br /&gt;
        //PowerMockito mockea los metodos estaticos que se encuentren en la &lt;br /&gt;
        //clase ClaseConMetodosEstaticos&lt;br /&gt;
        PowerMockito.mockStatic(ClaseConMetodosEstaticos.class);&lt;br /&gt;
&lt;br /&gt;
        //Con mockito determinamos el retorno del metodo estatico&lt;br /&gt;
        when(ClaseConMetodosEstaticos.firstStaticMethod(param)).thenReturn(value);&lt;br /&gt;
&lt;br /&gt;
        // ejecucion &lt;br /&gt;
        instance.invocarMetodoEstatico();&lt;br /&gt;
&lt;br /&gt;
        //Por cada metodo estatico que se quiere verificar se debe invocar &lt;br /&gt;
        //a PowerMockito.verifyStatic().&lt;br /&gt;
        PowerMockito.verifyStatic(); &lt;br /&gt;
        ClaseConMetodosEstaticos.secondStaticMethod();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Invocación a un método privado===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
public class PruebaMetodoPrivado {&lt;br /&gt;
&lt;br /&gt;
    public String decirHola(String nombre) {&lt;br /&gt;
        return decirHolaNombre(nombre);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    private String decirHolaNombre(String nombre) {&lt;br /&gt;
        return &amp;quot;Hola &amp;quot;+nombre;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@RunWith(PowerMockRunner.class)&lt;br /&gt;
@PrepareForTest(PruebaMetodoPrivado.class)&lt;br /&gt;
public class PruebaMetodoPrivadoTest {&lt;br /&gt;
&lt;br /&gt;
   @Spy&lt;br /&gt;
   PruebaMetodoPrivado metodoPrivado = new PruebaMetodoPrivado();&lt;br /&gt;
    &lt;br /&gt;
    @Test&lt;br /&gt;
    public void mockMetodoPrivado() throws Exception {&lt;br /&gt;
&lt;br /&gt;
	Assert.assertEquals(&amp;quot;Hola Juan&amp;quot;, metodoPrivado.decirHola(&amp;quot;Juan&amp;quot;));&lt;br /&gt;
        doReturn(&amp;quot;Chau Juan&amp;quot;).when(metodoPrivado,&amp;quot;decirHolaNombre&amp;quot;,&amp;quot;Juan&amp;quot;);&lt;br /&gt;
        Assert.assertEquals(&amp;quot;Chau Juan&amp;quot;,metodoPrivado.decirHola(&amp;quot;Juan&amp;quot;));&lt;br /&gt;
        verifyPrivate(metodoPrivado,&lt;br /&gt;
                       Mockito.times(2)).invoke(&amp;quot;decirHolaNombre&amp;quot;,&amp;quot;Juan&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Otra manera de invocar a un metodo privado (Bypass encapsulation) ===&lt;br /&gt;
&lt;br /&gt;
Para invocar a un metodo privado se puede usar el metodo de PowerMock '''Whitebox.invokeMethod(..)'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
public class PruebaMetodoPrivado2 {&lt;br /&gt;
&lt;br /&gt;
    ....&lt;br /&gt;
&lt;br /&gt;
    private int sumar(int a, int b) {&lt;br /&gt;
        return a+b;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
import org.powermock.reflect.Whitebox;&lt;br /&gt;
&lt;br /&gt;
public class PruebaMetodoPrivado2Test {&lt;br /&gt;
&lt;br /&gt;
    private PruebaMetodoPrivado2 instance;&lt;br /&gt;
&lt;br /&gt;
    @Before&lt;br /&gt;
    public void setup() throws Exception {&lt;br /&gt;
        instance = new PruebaMetodoPrivado2(); &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    @Test&lt;br /&gt;
    public void sumar_conParametrosEnteros_retornaSuma() throws Exception {&lt;br /&gt;
&lt;br /&gt;
        int respuestaEsperada = 4;&lt;br /&gt;
&lt;br /&gt;
        int respuestaObtenida = Whitebox.&amp;lt;Integer&amp;gt; invokeMethod(instance, &amp;quot;sumar&amp;quot;, 1, 3);&lt;br /&gt;
&lt;br /&gt;
	Assert.assertEquals(respuestaEsperada, respuestaObtenida);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Inicialización de atributos estaticos===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
public class PruebaInicializacionEstaticos {&lt;br /&gt;
&lt;br /&gt;
    private static final String atributo = new String(&amp;quot;CHAU&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
    public String crearObjetoLista() {&lt;br /&gt;
        return atributo;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@RunWith(PowerMockRunner.class)&lt;br /&gt;
@SuppressStaticInitializationFor(&amp;quot;PruebaInicializacionEstaticos&amp;quot;)&lt;br /&gt;
@PrepareForTest(PruebaInicializacionEstaticos.class)&lt;br /&gt;
public class PruebaMetodoPrivadoTest {&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
   PruebaInicializacionEstaticos pruebaInicializacionEstaticos = &lt;br /&gt;
                                    new PruebaInicializacionEstaticos();&lt;br /&gt;
 &lt;br /&gt;
    @Test&lt;br /&gt;
    public void controlCreacionLista() throws Exception {&lt;br /&gt;
	Assert.assertNull(pruebaInicializacionEstaticos.retornarAtrinbuto());&lt;br /&gt;
        String s = &amp;quot;Hola&amp;quot;;&lt;br /&gt;
        Whitebox.setInternalState(pruebaInicializacionEstaticos.class,&amp;quot;atributo&amp;quot;, s);&lt;br /&gt;
        Assert.assertEquals(s, pruebaInicializacionEstaticos.retornarAtrinbuto());&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Captura creación de objetos===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
public class PruebaCreacionObjeto {&lt;br /&gt;
 &lt;br /&gt;
    public List crearObjetoLista() {&lt;br /&gt;
        return new ArrayList();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@RunWith(PowerMockRunner.class)&lt;br /&gt;
@PrepareForTest(PruebaCreacionObjeto.class)&lt;br /&gt;
public class PruebaMetodoPrivadoTest {&lt;br /&gt;
 &lt;br /&gt;
   @Spy&lt;br /&gt;
   PruebaCreacionObjeto pruebaCreacionObjeto = new PruebaCreacionObjeto();&lt;br /&gt;
 &lt;br /&gt;
    @Test&lt;br /&gt;
    public void controlCreacionLista() throws Exception {&lt;br /&gt;
        List list = new ArrayList();&lt;br /&gt;
        list.add(&amp;quot;Hola&amp;quot;);&lt;br /&gt;
        whenNew(ArrayList.class).withNoArguments().thenReturn((ArrayList) list);&lt;br /&gt;
        List resultado = pruebaCreacionObjeto.crearObjetoLista();&lt;br /&gt;
        Assert.assertEquals(list, resultado);&lt;br /&gt;
        verifyNew(ArrayList.class);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para mas ejemplos de Mockito junto a PowerMock ver los [http://code.google.com/p/powermock/wiki/MockitoUsage13 ejemplos] provisto por la documentación de PowerMock.&lt;br /&gt;
&lt;br /&gt;
[http://www.dosideas.com/descargas/category/3-testing.html?download=40 Descargar proyecto NetBeans demo de los ejemplos]&lt;br /&gt;
&lt;br /&gt;
===PowerMockito &amp;amp; Cobertura===&lt;br /&gt;
Existe un problema al utilizar PowerMockito con Cobertura (versión 1.8.4), este último no registra la corrida de los test con anotación @PrepareForTest, dando como resultados falta de cobertura.&lt;br /&gt;
Para solucionar este inconveniente solo hay que actualizar la versión de Cobertura.&lt;br /&gt;
&lt;br /&gt;
==Ejemplo de Mockito para mockear appender de log4j==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
//Inicializamos mock.&lt;br /&gt;
Appender mockAppender = mock(AppenderSkeleton.class);&lt;br /&gt;
//Inicializamos logger de la clase bajo test&lt;br /&gt;
Logger log = Logger.getLogger(ClaseATestear.class);&lt;br /&gt;
//Agregamos el mock del appender al logger.&lt;br /&gt;
log.addAppender(mockAppender);&lt;br /&gt;
//Seteamos el nivel de log que nos interesa recuperar.&lt;br /&gt;
log.setLevel(Level.DEBUG);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para poder obtener los log que se produjeron utilizamos la clase ArgumentCaptor de mockito que nos permite, entre otras cosas, capturar los eventos de log.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
ArgumentCaptor loggingEventCaptor = ArgumentCaptor.forClass(LoggingEvent.class);&lt;br /&gt;
&lt;br /&gt;
loggingEventCaptor.capture());&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una posible forma de obtener un mensaje particular es iterando la lista de mensajes que nos da la clase capturada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
List&amp;lt;LoggingEvent&amp;gt; loggingEvent = (List&amp;lt;LoggingEvent&amp;gt;) loggingEventCaptor.getAllValues();&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BDDMockito ==&lt;br /&gt;
BDDMokcito es una clase alternativa que ofrece [[Mockito]] para crear pruebas al estilo [[Behavior Driven Development]] (BDD) (es decir, con bloques dado / cuando / entonces). &lt;br /&gt;
&lt;br /&gt;
El problema es que el API de Mockito usa la palabra &amp;quot;when&amp;quot; y no se integra bien con los comentarios //given //when //then (según BDD, el stubbing forma parte del área //given, y no del //when). &lt;br /&gt;
&lt;br /&gt;
BDDMockito agrega una clase que tiene alias para los métodos de stub, usando given(Object). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java5&amp;gt;&lt;br /&gt;
 import static org.mockito.BDDMockito.*;&lt;br /&gt;
 &lt;br /&gt;
 Vendedor vendedor = mock(Vendedor.class);&lt;br /&gt;
 Negocio negocio = new Negocio(vendedor);&lt;br /&gt;
 &lt;br /&gt;
 @Test&lt;br /&gt;
 public void comprarPan() throws Exception {&lt;br /&gt;
   //given  &lt;br /&gt;
   given(vendedor.buscarPan()).willReturn(new Pan());&lt;br /&gt;
   &lt;br /&gt;
   //when&lt;br /&gt;
   Compra compra = negocio.comprarPan();&lt;br /&gt;
   &lt;br /&gt;
   //then&lt;br /&gt;
   assertThat(compra, contienePan());&lt;br /&gt;
 } &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stubbing con void y excepciones:&lt;br /&gt;
&amp;lt;code java5&amp;gt;&lt;br /&gt;
   //given&lt;br /&gt;
   willThrow(new RuntimeException(&amp;quot;boo&amp;quot;)).given(mock).foo();&lt;br /&gt;
   &lt;br /&gt;
   //when&lt;br /&gt;
   Result result = sistemaBajoPrueba.ejecutar();&lt;br /&gt;
   &lt;br /&gt;
   //then&lt;br /&gt;
   assertEquals(failure, result); &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ver también==&lt;br /&gt;
* [[EasyMock]]&lt;br /&gt;
* [[Captura De Parametros]]&lt;br /&gt;
* [[Inyeccion De Mocks De Mockito Con Spring]]&lt;br /&gt;
* [[Test de componente para un cliente TCP]]&lt;br /&gt;
* [http://www.dosideas.com/descargas/category/3-testing.html?download=11%3Ademo-de-mockito Proyecto de ejemplos con Mockito]&lt;br /&gt;
* [http://www.dosideas.com/java/242-mockito-o-basta-de-easymock.html Introducción a Mockito]&lt;br /&gt;
* [http://mockito.googlecode.com/svn/branches/1.8.0/javadoc/org/mockito/BDDMockito.html Javadoc de BDDMockito]&lt;br /&gt;
&lt;br /&gt;
[[Category:TDD]]&lt;br /&gt;
[[Category:BDD]]&lt;br /&gt;
[[Category:JUnit]]&lt;/div&gt;</summary>
		<author><name>Cbbarbie</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Mockito&amp;diff=6423</id>
		<title>Mockito</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Mockito&amp;diff=6423"/>
				<updated>2011-10-13T14:25:54Z</updated>
		
		<summary type="html">&lt;p&gt;Cbbarbie: /* Otra manera de invocar a un metodo privado (Bypass encapsulation) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mockito es una librería [[Java]] para la creación de [[Mock Object]] muy usados para el testeo unitario en [[Test Driven Development]], basado en [[EasyMock]]. &lt;br /&gt;
&lt;br /&gt;
Mockito fue creado con el objetivo de simplificar y solucionar algunos de los temas antes mencionados. EasyMock y Mockito puede hacer exactamente las mismas cosas, pero Mockito tiene un API más natural y práctico de usar.&lt;br /&gt;
&lt;br /&gt;
==Características principales==&lt;br /&gt;
# Se pueden crear mocks de interfaces y clases concretas.&lt;br /&gt;
# Verificación de invocaciones (cantidad exacta, al menos una vez, órden de invocación, etc.)&lt;br /&gt;
# El stack trace se mantiene limpio, ya que los errores ocurren en los assert que se hagan (y no dentro del método bajo prueba, como en EasyMock).&lt;br /&gt;
# Un API más clara para crear stubs y verificaciones&lt;br /&gt;
&lt;br /&gt;
==Ejemplo de uso==&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
import static org.mockito.Mockito.*;&lt;br /&gt;
.....&lt;br /&gt;
//creamos el mock y el stub&lt;br /&gt;
ArrayList instance = mock(ArrayList.class);&lt;br /&gt;
doReturn(&amp;quot;hola mundo&amp;quot;).when(instance).get(0);&lt;br /&gt;
 &lt;br /&gt;
//ejecutamos la lógica a probar&lt;br /&gt;
instance.get(0);     &lt;br /&gt;
 &lt;br /&gt;
//verificamos que se hayan invocado los métodos&lt;br /&gt;
verify(instance).get(0);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Más de una invocación a un mismo método==&lt;br /&gt;
&lt;br /&gt;
Algunas veces necesitamos que un método retorne un valor y que en la segunda invocación retorne nulo o una excepción. Para eso, anidamos los retornos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code html4strict&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//Retornos para las 2 invocaciones&lt;br /&gt;
doReturn(&amp;quot;algo&amp;quot;).doReturn(null).when(instance).scrollNext();&lt;br /&gt;
&lt;br /&gt;
//ejecutamos la lógica a probar&lt;br /&gt;
instance.unMetodoQueUsaScroll();     &lt;br /&gt;
&lt;br /&gt;
//verificamos que se haya invocado el mismo método dos veces&lt;br /&gt;
verify(instance, times(2)).scrollNext();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [http://mockito.googlecode.com/svn/branches/1.5/javadoc/org/mockito/Mockito.html Leer más en Mockito API]&lt;br /&gt;
&lt;br /&gt;
==Ejemplos de Mockito junto a PowerMock==&lt;br /&gt;
&lt;br /&gt;
===Invocación a un método estático===&lt;br /&gt;
&lt;br /&gt;
Para mockear métodos estáticos, según el [http://code.google.com/p/mockito/wiki/FAQ FAQ] de mockito, esto no es posible. Pero nombra 2 framewors que pueden resultarnos útil [http://jmockit.dev.java.net/ JMockit] y [http://code.google.com/p/powermock PowerMock]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@RunWith(PowerMockRunner.class)&lt;br /&gt;
@PrepareForTest(ClaseConMetodosEstaticos.class)&lt;br /&gt;
public class DosIdeasTestCase {&lt;br /&gt;
    @Test&lt;br /&gt;
    public void testMetodo_conInvocacionAMetodosEstaticos() {&lt;br /&gt;
	&lt;br /&gt;
        //PowerMockito mockea los metodos estaticos que se encuentren en la &lt;br /&gt;
        //clase ClaseConMetodosEstaticos&lt;br /&gt;
        PowerMockito.mockStatic(ClaseConMetodosEstaticos.class);&lt;br /&gt;
&lt;br /&gt;
        //Con mockito determinamos el retorno del metodo estatico&lt;br /&gt;
        when(ClaseConMetodosEstaticos.firstStaticMethod(param)).thenReturn(value);&lt;br /&gt;
&lt;br /&gt;
        // ejecucion &lt;br /&gt;
        instance.invocarMetodoEstatico();&lt;br /&gt;
&lt;br /&gt;
        //Por cada metodo estatico que se quiere verificar se debe invocar &lt;br /&gt;
        //a PowerMockito.verifyStatic().&lt;br /&gt;
        PowerMockito.verifyStatic(); &lt;br /&gt;
        ClaseConMetodosEstaticos.secondStaticMethod();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Invocación a un método privado===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
public class PruebaMetodoPrivado {&lt;br /&gt;
&lt;br /&gt;
    public String decirHola(String nombre) {&lt;br /&gt;
        return decirHolaNombre(nombre);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    private String decirHolaNombre(String nombre) {&lt;br /&gt;
        return &amp;quot;Hola &amp;quot;+nombre;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@RunWith(PowerMockRunner.class)&lt;br /&gt;
@PrepareForTest(PruebaMetodoPrivado.class)&lt;br /&gt;
public class PruebaMetodoPrivadoTest {&lt;br /&gt;
&lt;br /&gt;
   @Spy&lt;br /&gt;
   PruebaMetodoPrivado metodoPrivado = new PruebaMetodoPrivado();&lt;br /&gt;
    &lt;br /&gt;
    @Test&lt;br /&gt;
    public void mockMetodoPrivado() throws Exception {&lt;br /&gt;
&lt;br /&gt;
	Assert.assertEquals(&amp;quot;Hola Juan&amp;quot;, metodoPrivado.decirHola(&amp;quot;Juan&amp;quot;));&lt;br /&gt;
        doReturn(&amp;quot;Chau Juan&amp;quot;).when(metodoPrivado,&amp;quot;decirHolaNombre&amp;quot;,&amp;quot;Juan&amp;quot;);&lt;br /&gt;
        Assert.assertEquals(&amp;quot;Chau Juan&amp;quot;,metodoPrivado.decirHola(&amp;quot;Juan&amp;quot;));&lt;br /&gt;
        verifyPrivate(metodoPrivado,&lt;br /&gt;
                       Mockito.times(2)).invoke(&amp;quot;decirHolaNombre&amp;quot;,&amp;quot;Juan&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Otra manera de invocar a un metodo privado (Bypass encapsulation) ===&lt;br /&gt;
&lt;br /&gt;
Para invocar a un metodo privado se puede usar el metodo de PowerMock '''Whitebox.invokeMethod(..)'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
public class PruebaMetodoPrivado2 {&lt;br /&gt;
&lt;br /&gt;
    ....&lt;br /&gt;
&lt;br /&gt;
    private int sumar(int a, int b) {&lt;br /&gt;
        return a+b;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@RunWith(PowerMockRunner.class)&lt;br /&gt;
public class PruebaMetodoPrivado2Test {&lt;br /&gt;
&lt;br /&gt;
    private PruebaMetodoPrivado2 instance;&lt;br /&gt;
&lt;br /&gt;
    @Before&lt;br /&gt;
    public void setup() throws Exception {&lt;br /&gt;
        instance = new PruebaMetodoPrivado2(); &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    @Test&lt;br /&gt;
    public void sumar_conParametrosEnteros_retornaSuma() throws Exception {&lt;br /&gt;
&lt;br /&gt;
        int respuestaEsperada = 4;&lt;br /&gt;
&lt;br /&gt;
        int respuestaObtenida = Whitebox.&amp;lt;Integer&amp;gt; invokeMethod(instance, &amp;quot;sumar&amp;quot;, 1, 3);&lt;br /&gt;
&lt;br /&gt;
	Assert.assertEquals(respuestaEsperada, respuestaObtenida);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Inicialización de atributos estaticos===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
public class PruebaInicializacionEstaticos {&lt;br /&gt;
&lt;br /&gt;
    private static final String atributo = new String(&amp;quot;CHAU&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
    public String crearObjetoLista() {&lt;br /&gt;
        return atributo;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@RunWith(PowerMockRunner.class)&lt;br /&gt;
@SuppressStaticInitializationFor(&amp;quot;PruebaInicializacionEstaticos&amp;quot;)&lt;br /&gt;
@PrepareForTest(PruebaInicializacionEstaticos.class)&lt;br /&gt;
public class PruebaMetodoPrivadoTest {&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
   PruebaInicializacionEstaticos pruebaInicializacionEstaticos = &lt;br /&gt;
                                    new PruebaInicializacionEstaticos();&lt;br /&gt;
 &lt;br /&gt;
    @Test&lt;br /&gt;
    public void controlCreacionLista() throws Exception {&lt;br /&gt;
	Assert.assertNull(pruebaInicializacionEstaticos.retornarAtrinbuto());&lt;br /&gt;
        String s = &amp;quot;Hola&amp;quot;;&lt;br /&gt;
        Whitebox.setInternalState(pruebaInicializacionEstaticos.class,&amp;quot;atributo&amp;quot;, s);&lt;br /&gt;
        Assert.assertEquals(s, pruebaInicializacionEstaticos.retornarAtrinbuto());&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Captura creación de objetos===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
public class PruebaCreacionObjeto {&lt;br /&gt;
 &lt;br /&gt;
    public List crearObjetoLista() {&lt;br /&gt;
        return new ArrayList();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@RunWith(PowerMockRunner.class)&lt;br /&gt;
@PrepareForTest(PruebaCreacionObjeto.class)&lt;br /&gt;
public class PruebaMetodoPrivadoTest {&lt;br /&gt;
 &lt;br /&gt;
   @Spy&lt;br /&gt;
   PruebaCreacionObjeto pruebaCreacionObjeto = new PruebaCreacionObjeto();&lt;br /&gt;
 &lt;br /&gt;
    @Test&lt;br /&gt;
    public void controlCreacionLista() throws Exception {&lt;br /&gt;
        List list = new ArrayList();&lt;br /&gt;
        list.add(&amp;quot;Hola&amp;quot;);&lt;br /&gt;
        whenNew(ArrayList.class).withNoArguments().thenReturn((ArrayList) list);&lt;br /&gt;
        List resultado = pruebaCreacionObjeto.crearObjetoLista();&lt;br /&gt;
        Assert.assertEquals(list, resultado);&lt;br /&gt;
        verifyNew(ArrayList.class);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para mas ejemplos de Mockito junto a PowerMock ver los [http://code.google.com/p/powermock/wiki/MockitoUsage13 ejemplos] provisto por la documentación de PowerMock.&lt;br /&gt;
&lt;br /&gt;
[http://www.dosideas.com/descargas/category/3-testing.html?download=40 Descargar proyecto NetBeans demo de los ejemplos]&lt;br /&gt;
&lt;br /&gt;
===PowerMockito &amp;amp; Cobertura===&lt;br /&gt;
Existe un problema al utilizar PowerMockito con Cobertura (versión 1.8.4), este último no registra la corrida de los test con anotación @PrepareForTest, dando como resultados falta de cobertura.&lt;br /&gt;
Para solucionar este inconveniente solo hay que actualizar la versión de Cobertura.&lt;br /&gt;
&lt;br /&gt;
==Ejemplo de Mockito para mockear appender de log4j==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
//Inicializamos mock.&lt;br /&gt;
Appender mockAppender = mock(AppenderSkeleton.class);&lt;br /&gt;
//Inicializamos logger de la clase bajo test&lt;br /&gt;
Logger log = Logger.getLogger(ClaseATestear.class);&lt;br /&gt;
//Agregamos el mock del appender al logger.&lt;br /&gt;
log.addAppender(mockAppender);&lt;br /&gt;
//Seteamos el nivel de log que nos interesa recuperar.&lt;br /&gt;
log.setLevel(Level.DEBUG);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para poder obtener los log que se produjeron utilizamos la clase ArgumentCaptor de mockito que nos permite, entre otras cosas, capturar los eventos de log.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
ArgumentCaptor loggingEventCaptor = ArgumentCaptor.forClass(LoggingEvent.class);&lt;br /&gt;
&lt;br /&gt;
loggingEventCaptor.capture());&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una posible forma de obtener un mensaje particular es iterando la lista de mensajes que nos da la clase capturada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
List&amp;lt;LoggingEvent&amp;gt; loggingEvent = (List&amp;lt;LoggingEvent&amp;gt;) loggingEventCaptor.getAllValues();&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BDDMockito ==&lt;br /&gt;
BDDMokcito es una clase alternativa que ofrece [[Mockito]] para crear pruebas al estilo [[Behavior Driven Development]] (BDD) (es decir, con bloques dado / cuando / entonces). &lt;br /&gt;
&lt;br /&gt;
El problema es que el API de Mockito usa la palabra &amp;quot;when&amp;quot; y no se integra bien con los comentarios //given //when //then (según BDD, el stubbing forma parte del área //given, y no del //when). &lt;br /&gt;
&lt;br /&gt;
BDDMockito agrega una clase que tiene alias para los métodos de stub, usando given(Object). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java5&amp;gt;&lt;br /&gt;
 import static org.mockito.BDDMockito.*;&lt;br /&gt;
 &lt;br /&gt;
 Vendedor vendedor = mock(Vendedor.class);&lt;br /&gt;
 Negocio negocio = new Negocio(vendedor);&lt;br /&gt;
 &lt;br /&gt;
 @Test&lt;br /&gt;
 public void comprarPan() throws Exception {&lt;br /&gt;
   //given  &lt;br /&gt;
   given(vendedor.buscarPan()).willReturn(new Pan());&lt;br /&gt;
   &lt;br /&gt;
   //when&lt;br /&gt;
   Compra compra = negocio.comprarPan();&lt;br /&gt;
   &lt;br /&gt;
   //then&lt;br /&gt;
   assertThat(compra, contienePan());&lt;br /&gt;
 } &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stubbing con void y excepciones:&lt;br /&gt;
&amp;lt;code java5&amp;gt;&lt;br /&gt;
   //given&lt;br /&gt;
   willThrow(new RuntimeException(&amp;quot;boo&amp;quot;)).given(mock).foo();&lt;br /&gt;
   &lt;br /&gt;
   //when&lt;br /&gt;
   Result result = sistemaBajoPrueba.ejecutar();&lt;br /&gt;
   &lt;br /&gt;
   //then&lt;br /&gt;
   assertEquals(failure, result); &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ver también==&lt;br /&gt;
* [[EasyMock]]&lt;br /&gt;
* [[Captura De Parametros]]&lt;br /&gt;
* [[Inyeccion De Mocks De Mockito Con Spring]]&lt;br /&gt;
* [[Test de componente para un cliente TCP]]&lt;br /&gt;
* [http://www.dosideas.com/descargas/category/3-testing.html?download=11%3Ademo-de-mockito Proyecto de ejemplos con Mockito]&lt;br /&gt;
* [http://www.dosideas.com/java/242-mockito-o-basta-de-easymock.html Introducción a Mockito]&lt;br /&gt;
* [http://mockito.googlecode.com/svn/branches/1.8.0/javadoc/org/mockito/BDDMockito.html Javadoc de BDDMockito]&lt;br /&gt;
&lt;br /&gt;
[[Category:TDD]]&lt;br /&gt;
[[Category:BDD]]&lt;br /&gt;
[[Category:JUnit]]&lt;/div&gt;</summary>
		<author><name>Cbbarbie</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Mockito&amp;diff=6422</id>
		<title>Mockito</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Mockito&amp;diff=6422"/>
				<updated>2011-10-13T14:21:19Z</updated>
		
		<summary type="html">&lt;p&gt;Cbbarbie: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mockito es una librería [[Java]] para la creación de [[Mock Object]] muy usados para el testeo unitario en [[Test Driven Development]], basado en [[EasyMock]]. &lt;br /&gt;
&lt;br /&gt;
Mockito fue creado con el objetivo de simplificar y solucionar algunos de los temas antes mencionados. EasyMock y Mockito puede hacer exactamente las mismas cosas, pero Mockito tiene un API más natural y práctico de usar.&lt;br /&gt;
&lt;br /&gt;
==Características principales==&lt;br /&gt;
# Se pueden crear mocks de interfaces y clases concretas.&lt;br /&gt;
# Verificación de invocaciones (cantidad exacta, al menos una vez, órden de invocación, etc.)&lt;br /&gt;
# El stack trace se mantiene limpio, ya que los errores ocurren en los assert que se hagan (y no dentro del método bajo prueba, como en EasyMock).&lt;br /&gt;
# Un API más clara para crear stubs y verificaciones&lt;br /&gt;
&lt;br /&gt;
==Ejemplo de uso==&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
import static org.mockito.Mockito.*;&lt;br /&gt;
.....&lt;br /&gt;
//creamos el mock y el stub&lt;br /&gt;
ArrayList instance = mock(ArrayList.class);&lt;br /&gt;
doReturn(&amp;quot;hola mundo&amp;quot;).when(instance).get(0);&lt;br /&gt;
 &lt;br /&gt;
//ejecutamos la lógica a probar&lt;br /&gt;
instance.get(0);     &lt;br /&gt;
 &lt;br /&gt;
//verificamos que se hayan invocado los métodos&lt;br /&gt;
verify(instance).get(0);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Más de una invocación a un mismo método==&lt;br /&gt;
&lt;br /&gt;
Algunas veces necesitamos que un método retorne un valor y que en la segunda invocación retorne nulo o una excepción. Para eso, anidamos los retornos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code html4strict&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//Retornos para las 2 invocaciones&lt;br /&gt;
doReturn(&amp;quot;algo&amp;quot;).doReturn(null).when(instance).scrollNext();&lt;br /&gt;
&lt;br /&gt;
//ejecutamos la lógica a probar&lt;br /&gt;
instance.unMetodoQueUsaScroll();     &lt;br /&gt;
&lt;br /&gt;
//verificamos que se haya invocado el mismo método dos veces&lt;br /&gt;
verify(instance, times(2)).scrollNext();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [http://mockito.googlecode.com/svn/branches/1.5/javadoc/org/mockito/Mockito.html Leer más en Mockito API]&lt;br /&gt;
&lt;br /&gt;
==Ejemplos de Mockito junto a PowerMock==&lt;br /&gt;
&lt;br /&gt;
===Invocación a un método estático===&lt;br /&gt;
&lt;br /&gt;
Para mockear métodos estáticos, según el [http://code.google.com/p/mockito/wiki/FAQ FAQ] de mockito, esto no es posible. Pero nombra 2 framewors que pueden resultarnos útil [http://jmockit.dev.java.net/ JMockit] y [http://code.google.com/p/powermock PowerMock]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@RunWith(PowerMockRunner.class)&lt;br /&gt;
@PrepareForTest(ClaseConMetodosEstaticos.class)&lt;br /&gt;
public class DosIdeasTestCase {&lt;br /&gt;
    @Test&lt;br /&gt;
    public void testMetodo_conInvocacionAMetodosEstaticos() {&lt;br /&gt;
	&lt;br /&gt;
        //PowerMockito mockea los metodos estaticos que se encuentren en la &lt;br /&gt;
        //clase ClaseConMetodosEstaticos&lt;br /&gt;
        PowerMockito.mockStatic(ClaseConMetodosEstaticos.class);&lt;br /&gt;
&lt;br /&gt;
        //Con mockito determinamos el retorno del metodo estatico&lt;br /&gt;
        when(ClaseConMetodosEstaticos.firstStaticMethod(param)).thenReturn(value);&lt;br /&gt;
&lt;br /&gt;
        // ejecucion &lt;br /&gt;
        instance.invocarMetodoEstatico();&lt;br /&gt;
&lt;br /&gt;
        //Por cada metodo estatico que se quiere verificar se debe invocar &lt;br /&gt;
        //a PowerMockito.verifyStatic().&lt;br /&gt;
        PowerMockito.verifyStatic(); &lt;br /&gt;
        ClaseConMetodosEstaticos.secondStaticMethod();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Invocación a un método privado===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
public class PruebaMetodoPrivado {&lt;br /&gt;
&lt;br /&gt;
    public String decirHola(String nombre) {&lt;br /&gt;
        return decirHolaNombre(nombre);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    private String decirHolaNombre(String nombre) {&lt;br /&gt;
        return &amp;quot;Hola &amp;quot;+nombre;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@RunWith(PowerMockRunner.class)&lt;br /&gt;
@PrepareForTest(PruebaMetodoPrivado.class)&lt;br /&gt;
public class PruebaMetodoPrivadoTest {&lt;br /&gt;
&lt;br /&gt;
   @Spy&lt;br /&gt;
   PruebaMetodoPrivado metodoPrivado = new PruebaMetodoPrivado();&lt;br /&gt;
    &lt;br /&gt;
    @Test&lt;br /&gt;
    public void mockMetodoPrivado() throws Exception {&lt;br /&gt;
&lt;br /&gt;
	Assert.assertEquals(&amp;quot;Hola Juan&amp;quot;, metodoPrivado.decirHola(&amp;quot;Juan&amp;quot;));&lt;br /&gt;
        doReturn(&amp;quot;Chau Juan&amp;quot;).when(metodoPrivado,&amp;quot;decirHolaNombre&amp;quot;,&amp;quot;Juan&amp;quot;);&lt;br /&gt;
        Assert.assertEquals(&amp;quot;Chau Juan&amp;quot;,metodoPrivado.decirHola(&amp;quot;Juan&amp;quot;));&lt;br /&gt;
        verifyPrivate(metodoPrivado,&lt;br /&gt;
                       Mockito.times(2)).invoke(&amp;quot;decirHolaNombre&amp;quot;,&amp;quot;Juan&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Otra manera de invocar a un metodo privado (Bypass encapsulation) ===&lt;br /&gt;
&lt;br /&gt;
Para invocar a un metodo privado se puede usar el metodo de PowerMock '''Whitebox.invokeMethod(..)'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
public class PruebaMetodoPrivado2 {&lt;br /&gt;
&lt;br /&gt;
    ....&lt;br /&gt;
&lt;br /&gt;
    private int sumar(int a, int b) {&lt;br /&gt;
        return a+b;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@RunWith(PowerMockRunner.class)&lt;br /&gt;
public class PruebaMetodoPrivado2Test {&lt;br /&gt;
&lt;br /&gt;
    private PruebaMetodoPrivado2 instance;&lt;br /&gt;
&lt;br /&gt;
    @Before&lt;br /&gt;
    public void setup() throws Exception {&lt;br /&gt;
        instance = new PruebaMetodoPrivado2(); &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    @Test&lt;br /&gt;
    public void sumar_conParametrosEnteros_retornaSuma() throws Exception {&lt;br /&gt;
&lt;br /&gt;
        int respuestaEsperada = 4;&lt;br /&gt;
&lt;br /&gt;
        int respuestaObtenida = Whitebox.&amp;lt;Integer&amp;gt; invokeMethod(instance, &amp;quot;sumar&amp;quot;, 1, 3);&lt;br /&gt;
&lt;br /&gt;
	Assert.assertEquals(respuestaEsperada, respuestaObtenida);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Inicialización de atributos estaticos===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
public class PruebaInicializacionEstaticos {&lt;br /&gt;
&lt;br /&gt;
    private static final String atributo = new String(&amp;quot;CHAU&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
    public String crearObjetoLista() {&lt;br /&gt;
        return atributo;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@RunWith(PowerMockRunner.class)&lt;br /&gt;
@SuppressStaticInitializationFor(&amp;quot;PruebaInicializacionEstaticos&amp;quot;)&lt;br /&gt;
@PrepareForTest(PruebaInicializacionEstaticos.class)&lt;br /&gt;
public class PruebaMetodoPrivadoTest {&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
   PruebaInicializacionEstaticos pruebaInicializacionEstaticos = &lt;br /&gt;
                                    new PruebaInicializacionEstaticos();&lt;br /&gt;
 &lt;br /&gt;
    @Test&lt;br /&gt;
    public void controlCreacionLista() throws Exception {&lt;br /&gt;
	Assert.assertNull(pruebaInicializacionEstaticos.retornarAtrinbuto());&lt;br /&gt;
        String s = &amp;quot;Hola&amp;quot;;&lt;br /&gt;
        Whitebox.setInternalState(pruebaInicializacionEstaticos.class,&amp;quot;atributo&amp;quot;, s);&lt;br /&gt;
        Assert.assertEquals(s, pruebaInicializacionEstaticos.retornarAtrinbuto());&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Captura creación de objetos===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
public class PruebaCreacionObjeto {&lt;br /&gt;
 &lt;br /&gt;
    public List crearObjetoLista() {&lt;br /&gt;
        return new ArrayList();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@RunWith(PowerMockRunner.class)&lt;br /&gt;
@PrepareForTest(PruebaCreacionObjeto.class)&lt;br /&gt;
public class PruebaMetodoPrivadoTest {&lt;br /&gt;
 &lt;br /&gt;
   @Spy&lt;br /&gt;
   PruebaCreacionObjeto pruebaCreacionObjeto = new PruebaCreacionObjeto();&lt;br /&gt;
 &lt;br /&gt;
    @Test&lt;br /&gt;
    public void controlCreacionLista() throws Exception {&lt;br /&gt;
        List list = new ArrayList();&lt;br /&gt;
        list.add(&amp;quot;Hola&amp;quot;);&lt;br /&gt;
        whenNew(ArrayList.class).withNoArguments().thenReturn((ArrayList) list);&lt;br /&gt;
        List resultado = pruebaCreacionObjeto.crearObjetoLista();&lt;br /&gt;
        Assert.assertEquals(list, resultado);&lt;br /&gt;
        verifyNew(ArrayList.class);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para mas ejemplos de Mockito junto a PowerMock ver los [http://code.google.com/p/powermock/wiki/MockitoUsage13 ejemplos] provisto por la documentación de PowerMock.&lt;br /&gt;
&lt;br /&gt;
[http://www.dosideas.com/descargas/category/3-testing.html?download=40 Descargar proyecto NetBeans demo de los ejemplos]&lt;br /&gt;
&lt;br /&gt;
===PowerMockito &amp;amp; Cobertura===&lt;br /&gt;
Existe un problema al utilizar PowerMockito con Cobertura (versión 1.8.4), este último no registra la corrida de los test con anotación @PrepareForTest, dando como resultados falta de cobertura.&lt;br /&gt;
Para solucionar este inconveniente solo hay que actualizar la versión de Cobertura.&lt;br /&gt;
&lt;br /&gt;
==Ejemplo de Mockito para mockear appender de log4j==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
//Inicializamos mock.&lt;br /&gt;
Appender mockAppender = mock(AppenderSkeleton.class);&lt;br /&gt;
//Inicializamos logger de la clase bajo test&lt;br /&gt;
Logger log = Logger.getLogger(ClaseATestear.class);&lt;br /&gt;
//Agregamos el mock del appender al logger.&lt;br /&gt;
log.addAppender(mockAppender);&lt;br /&gt;
//Seteamos el nivel de log que nos interesa recuperar.&lt;br /&gt;
log.setLevel(Level.DEBUG);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para poder obtener los log que se produjeron utilizamos la clase ArgumentCaptor de mockito que nos permite, entre otras cosas, capturar los eventos de log.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
ArgumentCaptor loggingEventCaptor = ArgumentCaptor.forClass(LoggingEvent.class);&lt;br /&gt;
&lt;br /&gt;
loggingEventCaptor.capture());&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una posible forma de obtener un mensaje particular es iterando la lista de mensajes que nos da la clase capturada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
List&amp;lt;LoggingEvent&amp;gt; loggingEvent = (List&amp;lt;LoggingEvent&amp;gt;) loggingEventCaptor.getAllValues();&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BDDMockito ==&lt;br /&gt;
BDDMokcito es una clase alternativa que ofrece [[Mockito]] para crear pruebas al estilo [[Behavior Driven Development]] (BDD) (es decir, con bloques dado / cuando / entonces). &lt;br /&gt;
&lt;br /&gt;
El problema es que el API de Mockito usa la palabra &amp;quot;when&amp;quot; y no se integra bien con los comentarios //given //when //then (según BDD, el stubbing forma parte del área //given, y no del //when). &lt;br /&gt;
&lt;br /&gt;
BDDMockito agrega una clase que tiene alias para los métodos de stub, usando given(Object). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java5&amp;gt;&lt;br /&gt;
 import static org.mockito.BDDMockito.*;&lt;br /&gt;
 &lt;br /&gt;
 Vendedor vendedor = mock(Vendedor.class);&lt;br /&gt;
 Negocio negocio = new Negocio(vendedor);&lt;br /&gt;
 &lt;br /&gt;
 @Test&lt;br /&gt;
 public void comprarPan() throws Exception {&lt;br /&gt;
   //given  &lt;br /&gt;
   given(vendedor.buscarPan()).willReturn(new Pan());&lt;br /&gt;
   &lt;br /&gt;
   //when&lt;br /&gt;
   Compra compra = negocio.comprarPan();&lt;br /&gt;
   &lt;br /&gt;
   //then&lt;br /&gt;
   assertThat(compra, contienePan());&lt;br /&gt;
 } &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stubbing con void y excepciones:&lt;br /&gt;
&amp;lt;code java5&amp;gt;&lt;br /&gt;
   //given&lt;br /&gt;
   willThrow(new RuntimeException(&amp;quot;boo&amp;quot;)).given(mock).foo();&lt;br /&gt;
   &lt;br /&gt;
   //when&lt;br /&gt;
   Result result = sistemaBajoPrueba.ejecutar();&lt;br /&gt;
   &lt;br /&gt;
   //then&lt;br /&gt;
   assertEquals(failure, result); &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ver también==&lt;br /&gt;
* [[EasyMock]]&lt;br /&gt;
* [[Captura De Parametros]]&lt;br /&gt;
* [[Inyeccion De Mocks De Mockito Con Spring]]&lt;br /&gt;
* [[Test de componente para un cliente TCP]]&lt;br /&gt;
* [http://www.dosideas.com/descargas/category/3-testing.html?download=11%3Ademo-de-mockito Proyecto de ejemplos con Mockito]&lt;br /&gt;
* [http://www.dosideas.com/java/242-mockito-o-basta-de-easymock.html Introducción a Mockito]&lt;br /&gt;
* [http://mockito.googlecode.com/svn/branches/1.8.0/javadoc/org/mockito/BDDMockito.html Javadoc de BDDMockito]&lt;br /&gt;
&lt;br /&gt;
[[Category:TDD]]&lt;br /&gt;
[[Category:BDD]]&lt;br /&gt;
[[Category:JUnit]]&lt;/div&gt;</summary>
		<author><name>Cbbarbie</name></author>	</entry>

	</feed>