java - 莫基托。验证方法参数

标签 java unit-testing junit mockito

我用谷歌搜索过这个,但没有找到任何相关的东西。我有这样的东西:

Object obj = getObject();
Mockeable mock= Mockito.mock(Mockeable.class);
Mockito.when(mock.mymethod(obj )).thenReturn(null);

Testeable testableObj = new Testeable();
testableObj.setMockeable(mock);
command.runtestmethod();

现在,我想验证在 runtestmethod() 内部调用的 mymethod(Object o) 是否被 Object o 调用>,没有其他。但我总是通过测试,无论我在验证中添加什么,例如:

Mockito.verify(mock.mymethod(Mockito.eq(obj)));

Mockito.verify(mock.mymethod(Mockito.eq(null)));

Mockito.verify(mock.mymethod(Mockito.eq("something_else")));

我总是通过考试。我怎样才能完成该验证(如果可能)?

谢谢。

最佳答案

ArgumentMatcher 的替代方法是 ArgumentCaptor .

官方示例:

ArgumentCaptor<Person> argument = ArgumentCaptor.forClass(Person.class);
verify(mock).doSomething(argument.capture());
assertEquals("John", argument.getValue().getName());

也可以使用 @Captor 定义捕获者。注释:

@Captor ArgumentCaptor<Person> captor;
//... MockitoAnnotations.initMocks(this);
@Test public void test() {
    //...
    verify(mock).doSomething(captor.capture());
    assertEquals("John", captor.getValue().getName());
}

关于java - 莫基托。验证方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3555472/

相关文章:

java - 在 AIX 上运行 JUnit 或 testng TC

java - 我应该关闭哪些编译器警告?

java - Pycrypto RSA PKCS1 OAEP SHA256 与 Java 的互操作性

java - 如何摆脱sql盲注?

c# - 为什么这个单元测试会抛出 "Element not found"异常?

java - 无法在单元测试的 Before 和 After 方法中启动/停止 Spark

java - if jsp中的条件不起作用

java - 时间无关的 JUnit 测试用例

sql - 值得自己测试数据访问查询吗?

java - 如何使用 Mockito 模拟被调用两次且第二个方法调用的参数是第一个方法调用的输出的方法