在这里检测到错位的参数匹配器。 您不能在Mockito中使用validation或存根之外的参数匹配器

BundleProcessorTest.java中的以下两个测试用例中,我遇到了exception,但是,我的第一个测试用例成功通过了。

org.mockito.exceptions.misusing.InvalidUseOfMatchersException:这里检测到错位的参数匹配器:

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

您不能在validation或存根之外使用参数匹配器。 正确使用参数匹配器的示例:when(mock.get(anyInt()))。thenReturn(null); doThrow(new RuntimeException())。when(mock).someVoidMethod(anyObject()); validation(模拟).someMethod(包含( “富”))

此外,此错误可能会显示,因为您使用参数匹配器与无法模拟的方法。 以下方法无法进行存根/validation:final / private / equals()/ hashCode()。

在sun.reflect.NativeMethodAccessorImpl.invoke(未知来源)的sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)中的bundle.test.BundleProcessorTest.bundlePluginCollectionShouldNotBeNull(BundleProcessorTest.java:28)

请在下面找到简化的代码清单: –

BundlePlugin.java

package bundle; import java.util.List; public class BundlePlugin { private final String pluginName ; private final List featureContent ; public BundlePlugin(String pluginName, List featureContent) { super(); this.pluginName = pluginName; this.featureContent = featureContent; } public String getPluginName() { return pluginName; } public List 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 artifactIterator) { List featureContent = new ArrayList() ; 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 artifactIterator = mock(Iterator.class) ; bundle.BundlePlugin bundlePlugin = bundleProcessor.getBundlePlugin(anyString(), artifactIterator) ; assertNotNull( bundlePlugin ); } @Test public void bundlePluginContentShouldNotBeNull() { Iterator artifactIterator = mock(Iterator.class) ; bundle.BundlePlugin bundlePlugin = bundleProcessor.getBundlePlugin(anyString(), artifactIterator) ; List featureContent = bundlePlugin.getFeatureContent() ; assertNotNull( featureContent ); } } 

如何毫无问题地执行此测试。


编辑1:

但是如果我用@Ignore注释标记bundlePluginCollectionShouldNotBeNull测试,那么第一个测试用例通过而没有任何exception。

您在调用测试方法时使用mockito anyString() ,它应该仅用于validation模拟对象以确保在测试中使用任何字符串参数调用某个方法,而不是调用测试本身。 对于您的测试,使用空字符串""而不是anyString()