在 BundleProcessorTest.java 的以下两个测试用例中,尽管我的第一个测试用例成功通过,但我低于异常。
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:在此处检测到放错位置的参数匹配器:
->在bundle.test.BundleProcessorTest.bundlePluginShouldNotBeNull(BundleProcessorTest.java:22)
您不能在验证或存根之外使用参数匹配器。正确使用参数匹配器的示例:when(mock.get(anyInt()))。thenReturn(null);
doThrow(new RuntimeException())。when(mock).someVoidMethod(anyObject());
verify(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
测试标记为测试,则第一个测试用例将毫无例外地通过。
您anyString()
在调用测试方法时使用了模仿,它仅用于验证模拟对象,以确保使用测试中的任何字符串参数调用某个方法,而不能调用测试本身。为了测试,请使用空字符串""
代替anyString()
。
在BundleProcessorTest.java中的以下两个测试用例中,我的第一个测试用例成功地通过了异常。 org.mockito.exceptions.misusing.invaliduseofmatchersexception:在此处检测到错误的参数匹配器: ->在bundle.test.bundleProcessorTest.bundlePluginShouldNotBenull(Bun
在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)?
看起来,当我这样使用thenReturn时: 当(abc.call())。然后返回(a)。然后返回(b), 我期望: 验证(abc,次(2))。调用() 相反,该方法似乎只被调用了一次,我有点困惑(我的测试工作如预期的那样,mock似乎返回了我预期的值),但对于调用次数,我不知道我是否得到了错误的结果,或者这是Mockito的预期行为?
我试图使用Mockito来模拟一个方法,但是,我不断地出错。我试图用spring注释设置Mockito @RunTo(MockitoJUnitRunner.class)类CPEServiceInvokerInimplNewTest{ 然后我用这个Mockito调用- 尝试并模仿这种方法- 我得到了这个错误- 如果匹配器与原始值组合,则可能会发生此异常://不正确:somethod(anyObjec