在测试中,我使用的是mockobject:
@Mock
ListMultipleChoice<String> listMultipleChoiceMock;
我试图验证其方法的使用:
verify(listMultipleChoiceMock).setRequired(true);
verify(listMultipleChoiceMock).setMaxRows(2);
verify(listMultipleChoiceMock).setDefaultModel(any(IModel.class));
但它抛出以下异常:
组织。莫基托。例外情况。滥用。UnfinishedVerificationException:此处缺少验证(模拟)的方法调用:
这一行的例外点是:
verify(listMultipleChoiceMock).setMaxRows(2);
setMaxRows接受一个int。
当我注释掉这一行时,测试成功了。调试程序时,我可以看到正在设置的setMaxRows方法:
brandsListMultipleChoice.setMaxRows(brandLabels.size());
BrandLabels是一个List,size()返回一个int。
我检查了品牌标签的大小,它是2。我也尝试过anyInt()和0,它们都会导致抛出异常。
我做错了什么?为什么这种验证没有成功?
下面是我的代码示例,它将失败:
import org.apache.wicket.markup.html.form.ListMultipleChoice;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import static org.mockito.Matchers.anyObject;
import static org.mockito.Mockito.verify;
import static org.powermock.api.mockito.PowerMockito.whenNew;
@RunWith(PowerMockRunner.class)
@PrepareForTest({Example.class})
public class ExampleTest {
@Mock
ListMultipleChoice<String> brandsListMultipleChoiceMock;
@Before
public void setUp() throws Exception {
whenNew(ListMultipleChoice.class).withAnyArguments().thenReturn(brandsListMultipleChoiceMock);
Example example = new Example();
}
@Test
public void test() throws Exception {
verify(brandsListMultipleChoiceMock).setRequired(true);
verify(brandsListMultipleChoiceMock).setMaxRows(1);
verify(brandsListMultipleChoiceMock).setDefaultModel(anyObject());
}
}
以及正在测试的类别:
import org.apache.wicket.markup.html.form.ListMultipleChoice;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class Example {
private ListMultipleChoice<String> brandsListMultipleChoice;
public Example() {
List<String> brandLabels = new ArrayList<>();
brandLabels.add("DEMO");
brandsListMultipleChoice = new ListMultipleChoice<>("brands", new PropertyModel<Set<String>>(this, "brandProperty"), brandLabels);
brandsListMultipleChoice.setRequired(true);
brandsListMultipleChoice.setMaxRows(brandLabels.size());
brandsListMultipleChoice.setDefaultModel(new IModel<Set<String>>() {
private Set<String> list = new HashSet<>();
@Override
public Set<String> getObject() {
return list;
}
@Override
public void setObject(Set<String> ts) {
list = ts;
}
@Override
public void detach() {
}
});
}
}
当我注释掉第二个或第三个验证规则时,测试成功。
显然不可能嘲笑最终的方法。
将@PrepareTolution添加到该类的问题是
这样,PowerMockito将处理被模拟的对象。
我尝试编写简单的测试:
public class ListMultipleChoiceTest {
public class ListMultipleChoice<T>{
public void setMaxRows(int maxRows) {
}
}
@Mock
ListMultipleChoice<String> listMultipleChoiceMock;
@Test
public void testSetMaxRows() {
verify(listMultipleChoiceMock, never()).setMaxRows(2);
listMultipleChoiceMock.setMaxRows(2);
verify(listMultipleChoiceMock).setMaxRows(2);
}
}
它成功通过了。你应该仔细检查你的类使用情况。或者给出更多的代码示例。
如何验证一个模拟对象根本没有被调用?我正在尝试使用Mockito测试一个接口方法的空实现。
我的验证器类 当我没有选择任何选项就提交表单时, 无法将类型java.lang.String的属性值转换为属性类别所需的类型com.main.java.category;嵌套异常为java.lang.IllegalStateException:无法将类型[java.lang.String]的值转换为属性类别所需的类型[com.main.java.category]:找不到匹配的编辑器或转换策略 这
我正在测试带注释的javax验证。它们在应用程序中工作良好,方法参数上有注释。但是当我试图通过手动构建验证工厂来测试它们时 我得到以下错误。 javax。验证。ValidationException:HV000183:无法初始化“javax”。艾尔。“表达工厂”。检查类路径上是否有EL依赖项,或者改用ParameterMessageInterpolator 收到这个错误后,我在gradle文件中添
我读过很多关于这方面的帖子,但我无法解决我的问题。当我试图验证zend表单验证码时,即使文本正确,也总是失败。下面是我的代码: 谢谢你的时间和帮助!! 我看到了一些不可靠的东西:当我在联系人操作中转储$_post时,我的结果是: 我刚刚输入的验证码甚至出现了,取而代之的是验证码凯!!?? 我觉得我需要删除这个captchaField,但不知道如何到目前为止! 我可以用JS做到这一点,但必须有一个干
当我使用ValidationUtil.InvokeValidator验证时 2018-07-06 16:04:09.769错误10223--[nio-8080-exec-1]O.a.C.C.C.[.[.[/].[dispatcherServlet]:路径为[]的上下文中servlet[dispatcherServlet]的servlet.service()引发异常[请求处理失败;嵌套异常为java
我正在测试一个具有预期异常的方法。我还需要验证在抛出异常后是否调用了一些清理代码(在模拟对象上),但看起来该验证被忽略了。这是代码。我正在使用 Junit 来验证预期的异常。 似乎完全被忽略了。无论我在中使用什么方法,我的测试都通过了,这不是我想要的。 你知道为什么会发生这种情况吗?