Mi código es el siguiente,
@RunWith(MockitoJUnitRunner.class) public class MyClass { private static final String code ="Test"; @Mock private MyClassDAO dao; @InjectMocks private MyClassService Service = new MyClassServiceImpl(); @Test public void testDoSearch() throws Exception { final String METHOD_NAME = logger.getName().concat(".testDoSearchEcRcfInspections()"); CriteriaDTO dto = new CriteriaDTO(); dto.setCode(code); inspectionService.searchEcRcfInspections(dto); List<SearchCriteriaDTO> summaryList = new ArrayList<SearchCriteriaDTO>(); inspectionsSummaryList.add(dto); when(dao.doSearch(dto)).thenReturn(inspectionsSummaryList);//got error in this line verify(dao).doSearchInspections(dto); } }Estoy obteniendo por debajo de la excepción
org.mockito.exceptions.misusing.UnnecessaryStubbingException: Unnecessary stubbings detected in test class: Test Clean & maintainable test code requires zero unnecessary code. Following stubbings are unnecessary (click to navigate to relevant line of code): 1. -> at service.Test.testDoSearch(Test.java:72) Please remove unnecessary stubbings or use 'silent' option. More info: javadoc for UnnecessaryStubbingException class. at org.mockito.internal.exceptions.Reporter.formatUnncessaryStubbingException(Reporter.java:838) at org.mockito.internal.junit.UnnecessaryStubbingsReporter.validateUnusedStubs(UnnecessaryStubbingsReporter.java:34) at org.mockito.internal.runners.StrictRunner.run(StrictRunner.java:49) at org.mockito.junit.MockitoJUnitRunner.run(MockitoJUnitRunner.java:103) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Por favor ayúdenme como resolver
Al principio, debe verificar su lógica de prueba. Normalmente hay 3 casos. Primero, se está burlando del método incorrecto (cometió un error tipográfico o alguien cambió el código probado para que el método simulado ya no se use). En segundo lugar, su prueba está fallando antes de que se llame a este método. En tercer lugar, su lógica falla si / cambia la rama en algún lugar del código para que no se llame al método simulado.
Si este es el primer caso, siempre desea cambiar el método simulado por el utilizado en el código. Con el segundo y el tercero depende. Por lo general, solo debe eliminar este simulacro si no tiene ningún uso. Pero a veces hay ciertos casos en pruebas parametrizadas, que deberían tomar este camino diferente o fallar antes. Luego puede dividir esta prueba en dos o más, pero eso no siempre es atractivo. 3 métodos de prueba con posiblemente 3 proveedores de argumentos pueden hacer que su prueba parezca ilegible. En ese caso, para JUnit 4 silencia esta excepción con cualquiera
@RunWith(MockitoJUnitRunner.Silent.class)anotación o si está utilizando un enfoque de regla
@Rule public MockitoRule rule = MockitoJUnit.rule().strictness(Strictness.LENIENT);o (el mismo comportamiento)
@Rule public MockitoRule rule = MockitoJUnit.rule().silent(); Para las pruebas JUnit 5, puede silenciar esta excepción utilizando esta anotación provista en mockito-junit-jupiter :
@ExtendWith(MockitoExtension.class) @MockitoSettings(strictness = Strictness.LENIENT) class JUnit5MockitoTest { }Reemplace @RunWith(MockitoJUnitRunner.class) con @RunWith(MockitoJUnitRunner.Silent.class) .
Para mí, ni las @Rule ni @RunWith(MockitoJUnitRunner.Silent.class) funcionaron. Fue un proyecto heredado en el que actualizamos a mockito-core 2.23.0.
Podríamos deshacernos de UnnecessaryStubbingException usando:
Mockito.lenient().when(mockedService.getUserById(any())).thenReturn(new User());en vez de:
when(mockedService.getUserById(any())).thenReturn(new User());No hace falta decir que debería mirar el código de prueba, pero primero necesitábamos compilar las cosas y ejecutar las pruebas;)