当前位置: 首页 > 知识库问答 >
问题:

此处检测到错误的参数匹配器。在Mockito中,不能在验证或截尾之外使用参数匹配器

施飞昂
2023-03-14

在BundleProcessorTest.java中的以下两个测试用例中,我的第一个测试用例成功地通过了异常。

org.mockito.exceptions.misusing.invaliduseofmatchersexception:在此处检测到错误的参数匹配器:

->在bundle.test.bundleProcessorTest.bundlePluginShouldNotBenull(BundleProcessorTest.java:22)

不能在验证或短截之外使用参数匹配器。参数匹配器的正确用法示例:when(mock.get(anyInt())).ThenReturn(null);doThrow(新建RuntimeException()).When(mock).SomeVoidMethod(anyObject());验证(mock).someMethod(contains(“foo”))

此外,可能会出现此错误,因为您使用的参数匹配器带有无法嘲弄的方法。以下方法不能被截尾/验证:final/private/equals()/hashCode()。

在Bundle.test.BundleProcessorTest.BundlePluginCollectionShouldNotBenull(BundleProcessorTest.java:28)在Sun.Reflect.NativeMethodAccessorImpl.Invoke0(本机方法)在Sun.Reflect.NativeMethodAccessorImpl.Invoke(未知源)

请参阅以下简化代码列表:-

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 );
    }
}

如何执行这个测试没有问题。

编辑1:

但是如果我用@Ignore注释标记bundlePluginCollectionShouldNotBeNull测试,那么第一个测试用例将无一例外地通过。

共有1个答案

朱硕
2023-03-14

您在调用测试方法时使用mockitoanystring(),它应该只用于验证模拟对象,以确保使用测试中的任何字符串参数调用某个方法,而不是调用测试本身。对于测试,使用空字符串“”代替anyString()

 类似资料:
  • 问题内容: 在 BundleProcessorTest.java 的以下两个测试用例中,尽管我的第一个测试用例成功通过,但我低于异常。 org.mockito.exceptions.misusing.InvalidUseOfMatchersException:在此处检测到放错位置的参数匹配器: ->在bundle.test.BundleProcessorTest.bundlePluginShoul

  • 在setUp()方法下一行中: 以下是错误: org.mockito.exceptions.misusing.invaliduseofmatchersexception:在此处检测到错误放置或错误使用的参数匹配器: ->在com.auditService.test.auditServiceClientTest.setup(auditServiceClientTest.java:72) when(m

  • 我试图模拟EntityPersistor的一个方法 我想检查queryString是否匹配特定的queryString,以及params是否包含特定的值。如果那两个条件为真,我想返回一个特定的对象XY。 在此处检测到错误的参数匹配器: 我该怎么解决呢?或者是否有更好的方法来模拟一个方法并定义一个特定的返回大小写(如果param1 eq x和param2 eq y)?

  • 我试图使用Mockito来模拟一个方法,但是,我不断地出错。我试图用spring注释设置Mockito @RunTo(MockitoJUnitRunner.class)类CPEServiceInvokerInimplNewTest{ 然后我用这个Mockito调用- 尝试并模仿这种方法- 我得到了这个错误- 如果匹配器与原始值组合,则可能会发生此异常://不正确:somethod(anyObjec

  • 问题内容: 有没有办法匹配以下示例例程的任何类参数? 无论传递到哪个类,如何 始终 返回a ?以下尝试仅适用于匹配的特定情况。 编辑 :一种解决方案是 问题答案: 还有两种方法(请参阅我对@Tomasz Nurkiewicz的先前回答的评论): 第一个依据的事实是编译器根本不会让您传递错误的类型: 您会丢失准确的输入(),但可能会按需要使用。 第二个涉及更多,但如果您 确实 要确保to的参数是的或