2012-06-20 25 views
34
detalle

error:cuando corro prueba Mockito se produce WrongTypeOfReturnValue Excepción

org.mockito.exceptions.misusing.WrongTypeOfReturnValue: 
Boolean cannot be returned by updateItemAttributesByJuId() 
updateItemAttributesByJuId() should return ResultRich 
This exception might occur in wrongly written multi-threaded tests. 
Please refer to Mockito FAQ on limitations of concurrency testing. 

mi código:

@InjectMocks 
protected ItemArrangeManager arrangeManagerSpy = spy(new ItemArrangeManagerImpl()); 
@Mock 
protected JuItemWriteService juItemWriteService; 

when(arrangeManagerSpy 
    .updateItemAttributes(mapCaptor.capture(), eq(juId), eq(itemTO.getSellerId()))) 
    .thenReturn(false); 

Como se puede ver, yo estoy llamando when en updateItemAttributes (que devuelve un boolean) no en updateItemAttributesByJuId.

  1. ¿Por qué se Mockito intentar devolver un boolean de updateItemAttributesByJuId?
  2. ¿Cómo se puede rectificar esto?

Respuesta

20

Otra razón para el mensaje de error similar está tratando de burlarse de un método final. No se debe intentar burlar los métodos finales (ver Final method mocking).

También he confrontado el error en una prueba de múltiples hilos. La respuesta de gna funcionó en ese caso.

+0

resuelto mi caso [+1] –

1

Si está utilizando anotaciones, puede ser que necesite usar @Mock en lugar de @InjectMocks. Porque @InjectMocks funciona como @Spy y @Mock juntos. Y @Spy realiza un seguimiento de los métodos recientemente ejecutados y puede sentir que los datos incorrectos se devuelven/subtienden.

+1

"' @ InjectMocks' funciona como '@ Spy' y' @ Mock' juntos. " <- eso me parece incorrecto ¿De dónde escuchaste esto? –

2

Recientemente tuve este problema. El problema era que el método que estaba intentando burlar no tenía ningún modificador de acceso. Agregar público resolvió el problema.

2

En mi caso, el problema fue causado al intentar simular un método estático y olvidarse de llamar a mockStatic en la clase. También se olvidó de incluir la clase en la @PrepareForTest()

0

I tiene este error porque en mi prueba tenía dos expectativas, una a una maqueta y uno de tipo inmediato

MyClass cls = new MyClass(); 
MyClass cls2 = Mockito.mock(Myclass.class); 
when(foo.bar(cls)).thenReturn(); 
when(foo.baz(cls2)).thenReturn(); 

lo arreglé cambiando CLS ser un simulacro también

Cuestiones relacionadas