在这里检测到错位的参数匹配器。 您不能在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()
。