Encontrar instrucciones estáticas de importación para construcciones Mockito


Estoy tratando de chocar a través de la pared de ladrillo entre Mockito y yo. Me he arrancado el pelo al tratar de obtener instrucciones correctas de importación estática para cosas Mockito. Uno pensaría que alguien acaba de lanzar una mesa diciendo que anyInt() viene de org.mockito.Matchers and when() comes from org.mockito.Mockito , etc., pero eso sería demasiado útil para los recién llegados, ¿no?

Este tipo de cosas, especialmente cuando se mezclan con una miríada más importación sentencias que terminan en asteriscos, no siempre es muy útil:

import static org.junit.Assert.*;
import static org.mockito.Mockito.*;

Sí, conozco y he estado tratando de usar el mecanismo Ventana Eclipse -> Preferencias-> Java -> Editor-> Asistente de contenido -> Favoritos. Ayuda, pero no da en el clavo.

Cualquier respuesta a esta pregunta sería apreciada.

Muchas gracias, Russ

Author: javanna, 2011-09-06

3 answers

El problema es que las importaciones estáticas de Hamcrest y Mockito tienen nombres similares, pero devuelven Matchers y valores reales, respectivamente.

Una solución es simplemente copiar las clases Hamcrest y/o Mockito y eliminar/renombrar las funciones estáticas para que sean más fáciles de recordar y menos se muestren en el autocompletado. Eso es lo que hice.

También, al usar burlas, trato de evitar assertThat en favor de otros otros assertions y verify, por ejemplo,

assertEquals(1, 1);
verify(someMock).someMethod(eq(1));

En su lugar de

assertThat(1, equalTo(1));
verify(someMock).someMethod(eq(1));

Si eliminas las clases de tus Favoritos en Eclipse, y escribes el nombre largo, por ejemplo org.hamcrest.Matchers.equalTo y haces CTRL+SHIFT+M para 'Agregar importación', entonces autocompletar solo te mostrará los matchers de Hamcrest, no los matchers de Mockito. Y puedes hacer esto de la otra manera siempre y cuando no mezcles emparejadores.

 17
Author: Garrett Hall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-06 18:05:35

Esto es lo que he estado haciendo para hacer frente a la situación.

Utilizo importaciones globales en una nueva clase de prueba.

import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import static org.mockito.Matchers.*;

Cuando haya terminado de escribir su prueba y necesite confirmar, simplemente CTRL+SHIFT+O para organizar los paquetes. Por ejemplo, puede que te quedes con:

import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.Matchers.anyString;

Esto le permite codificar sin quedar 'atascado' tratando de encontrar el paquete correcto para importar.

 93
Author: Tony R,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-13 20:07:12

Para is ()

import static org.hamcrest.CoreMatchers.*;

Para assertThat ()

import static org.junit.Assert.*;

Para cuando () y verificar ()

import static org.mockito.Mockito.*;
 1
Author: ethemsulan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-23 07:44:27