From the following two test cases in BundleProcessorTest.java, I get below exceptions, although my first test case succeeds.
org.mockito.exceptions.misusing.InvalidUseOfMatchersException: An invalid argument argument was detected:
-> at bundle.test.BundleProcessorTest.bundlePluginShouldNotBeNull (BundleProcessorTest.java:22)
You cannot use argument arguments outside of validation or stubbing. Examples of the correct use of arguments: when (mock.get (anyInt ())) thenReturn (zero). doThrow (new RuntimeException ()). when (mock) .someVoidMethod (anyObject ()); check (layout) .someMethod (contains ("Foo"))
In addition, this error may occur because you use matching arguments with methods that cannot be mocked. The following methods cannot be stubbed / verified: final / private / equals () / hashCode ().
in bundle.test.BundleProcessorTest.bundlePluginCollectionShouldNotBeNull (BundleProcessorTest.java:28) at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native method) in sun.reflect.NativeMethodAccessorImpl.invoke (unknown)
The following is a simplified list of codes: -
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 ); } }
How to run this test without problems.
Change 1:
But if I mark the bundlePluginCollectionShouldNotBeNull test with the @Ignore annotation, then the first test case passes without any exceptions.
java unit-testing junit mockito
mogli Apr 24 '14 at 15:25 2014-04-24 15:25
source share