Cómo burlarse de un parámetro genérico para una prueba de unidad en Java?

Rohan Kumar:

Tengo una firma de la función que me gustaría burlarse de un servicio externo.

public <T> void save(T item, AnotherClass anotherClassObject);

Teniendo en cuenta esta firma de la función, y el nombre de la clase IGenericService, ¿cómo podría uno burlarse con PowerMock? O Mockito?

Por esta genérico, que estoy usando: Clase Theodorede la T en T item. Por ejemplo, he intentado usar:

doNothing().when(iGenericServiceMock.save(any(Theodore.class),
                    any(AnotherClass.class));

IntelliJ bielas a esto:

save(T, AnotherClass) cannot be applied to 
(org.Hamcrest.Matcher<Theodore>, org.Hamcrest.Matcher<AnotherClass>)

Y cita el siguiente motivo:

reason: No instance(s) of type variable T exist 
so that Matcher<T> conforms to AnotherClass

En primer lugar, la cuestión debe resolver si el argumento genéricos se maneja adecuadamente. ¿Cuáles son algunas cosas que uno podría hacer en este tipo de situaciones?

ACTUALIZACIÓN: Como compartida ETO:

doNothing().when(mockedObject).methodToMock(argMatcher); 

comparte el mismo destino.

ETO:

Usted está de paso de parámetros incorrectos when. Puede ser un poco confuso, pero hay dos usos diferentes de whenmétodo (en realidad estos son dos métodos diferentes):

  1. when(mockedObject.methodYouWantToMock(expectedParameter, orYourMatcher)).thenReturn(objectToReturn);
    
  2. doReturn(objectToReturn).when(mockedObject).methodYouWantToMock(expectedParameter, orYourMatcher);
    

Nota: prestar atención a los parámetros de entrada del whenmétodo en ambos casos .

En su caso particular, se podría hacer algo como esto:

doReturn(null).when(iGenericServiceMock).save(any(Theodore.class), any(AnotherClass.class));

Esto solucionará sus problemas de compilación. Sin embargo, la prueba fallará en tiempo de ejecución org.mockito.exceptions.misusing.CannotStubVoidMethodWithReturnValue, ya que están tratando de devolver algo a partir de un voidmétodo ( nullno es void). Lo que debe hacer es:

doNothing().when(iGenericServiceMock).save(any(Theodore.class), any(AnotherClass.class));

Más tarde se puede comprobar las interacciones con su maqueta usando verifyel método.

ACTUALIZAR:

Revisar sus importaciones. Debe utilizar org.mockito.Matchers.anyen lugar de org.hamcrest.Matchers.any.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=202595&siteId=1
Recomendado
Clasificación