java unit-testing junit mockito

java - El emparejador de argumentos fuera de lugar se detectó aquí. No se pueden usar los emparejadores de argumentos fuera de la verificación o el apéndice en Mockito



unit-testing junit (1)

De los dos casos de prueba siguientes en BundleProcessorTest.java , obtengo una excepción inferior, aunque mi primer caso de prueba pasa con éxito.

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: Se ha encontrado un correlacionador de argumentos fuera de lugar:

-> at bundle.test.BundleProcessorTest.bundlePluginShouldNotBeNull (BundleProcessorTest.java:22)

No se pueden usar los emparejadores de argumentos fuera de la verificación o el apéndice. Ejemplos de uso correcto de los coincidentes de argumentos: when (mock.get (anyInt ())). ThenReturn (null); doThrow (new RuntimeException ()). when (mock) .someVoidMethod (anyObject ()); verificar (simulacro) .someMethod (contiene ("foo"))

Además, este error puede aparecer porque utiliza los emparejadores de argumentos con métodos que no se pueden simular. Los siguientes métodos no pueden ser modificados / verificados: final / private / equals () / hashCode ().

at bundle.test.BundleProcessorTest.bundlePluginCollectionShouldNotBeNull (BundleProcessorTest.java:28) en sun.reflect.NativeMethodAccessorImpl.pl.

A continuación encontrará el listado simplificado de códigos:

BundlePlugin.java

package bundle; import java.util.List; public class BundlePlugin { private final String pluginName ; private final List<String> featureContent ; public BundlePlugin(String pluginName, List<String> featureContent) { super(); this.pluginName = pluginName; this.featureContent = featureContent; } public String getPluginName() { return pluginName; } public List<String> getFeatureContent() { return featureContent; } }

BundleProcessor.java

package bundle; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class BundleProcessor { public BundlePlugin getBundlePlugin(String pluginName, Iterator<String> artifactIterator) { List<String> featureContent = new ArrayList<String>() ; return new BundlePlugin(pluginName, featureContent); } }

BundleProcessorTest.java

package bundle.test; import static org.junit.Assert.assertNotNull; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.mock; import java.util.Iterator; import java.util.List; import org.junit.Test; import bundle.BundleProcessor; public class BundleProcessorTest { BundleProcessor bundleProcessor = new BundleProcessor() ; @Test public void bundlePluginShouldNotBeNull() { Iterator<String> artifactIterator = mock(Iterator.class) ; bundle.BundlePlugin bundlePlugin = bundleProcessor.getBundlePlugin(anyString(), artifactIterator) ; assertNotNull( bundlePlugin ); } @Test public void bundlePluginContentShouldNotBeNull() { Iterator<String> artifactIterator = mock(Iterator.class) ; bundle.BundlePlugin bundlePlugin = bundleProcessor.getBundlePlugin(anyString(), artifactIterator) ; List<String> featureContent = bundlePlugin.getFeatureContent() ; assertNotNull( featureContent ); } }

Cómo ejecutar esta prueba sin problema.

Edición 1:

Pero si marca la prueba bundlePluginCollectionShouldNotBeNull con la anotación @Ignore, entonces el primer caso de prueba pasa sin excepción.


Está utilizando mockito anyString() al llamar al método de prueba, debe usarse solo para verificar un objeto simulado para asegurar que se llame a un determinado método con cualquier parámetro de cadena dentro de la prueba, pero no para invocar la prueba en sí. Para su prueba use una cadena vacía "" lugar de anyString() .