我想验证一个方法是否通过mocki至少被调用一次。我使用verify,它会像这样抱怨:
org.mockito.exceptions.verification.TooManyActualInvocations:
Wanted 1 time:
But was 2 times. Undesired invocation:
我想验证一个方法是否通过mocki至少被调用一次。我使用verify,它会像这样抱怨:
org.mockito.exceptions.verification.TooManyActualInvocations:
Wanted 1 time:
But was 2 times. Undesired invocation:
当前回答
芬兰湾的科特林:
构建gradle:
testImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0"
代码:
interface MyCallback {
fun someMethod(value: String)
}
class MyTestableManager(private val callback: MyCallback){
fun perform(){
callback.someMethod("first")
callback.someMethod("second")
callback.someMethod("third")
}
}
测试:
import com.nhaarman.mockitokotlin2.times
import com.nhaarman.mockitokotlin2.verify
import com.nhaarman.mockitokotlin2.mock
...
val callback: MyCallback = mock()
val uut = MyTestableManager(callback)
uut.perform()
val captor: KArgumentCaptor<String> = com.nhaarman.mockitokotlin2.argumentCaptor<String>()
verify(callback, times(3)).someMethod(captor.capture())
assertTrue(captor.allValues[0] == "first")
assertTrue(captor.allValues[1] == "second")
assertTrue(captor.allValues[2] == "third")
对于Java:
龙目岛过去是简化的。如果愿意,还可以输入构造函数。
构建gradle:
testImplementation "org.mockito:mockito-core:3.6.28"
代码:
// MyCallback.java
public interface MyCallback {
void someMethod(String value);
}
// MyTestableManager.java
public class MyTestableManager {
private MyCallback callback;
public MyTestableManager(MyCallback callback) {
this.callback = callback;
}
public void perform(){
callback.someMethod("first");
callback.someMethod("second");
callback.someMethod("third");
}
}
测试:
import org.mockito.Mockito.times;
import org.mockito.Mockito.verify;
import org.mockito.Mock;
import org.mockito.Captor;
// whatever other imports you need
@Mock
private MyCallback callback;
@Captor
private ArgumentCaptor<String> captor;
private MyTestableManager uut = new MyTestableManager(callback);
// in your test method:
uut.perform()
verify(callback, times(3)).someMethod(captor.capture())
assertTrue(captor.getAllValues().get(0) == "first")
assertTrue(captor.getAllValues().get(1) == "second")
assertTrue(captor.getAllValues().get(2) == "third")
其他回答
芬兰湾的科特林:
构建gradle:
testImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0"
代码:
interface MyCallback {
fun someMethod(value: String)
}
class MyTestableManager(private val callback: MyCallback){
fun perform(){
callback.someMethod("first")
callback.someMethod("second")
callback.someMethod("third")
}
}
测试:
import com.nhaarman.mockitokotlin2.times
import com.nhaarman.mockitokotlin2.verify
import com.nhaarman.mockitokotlin2.mock
...
val callback: MyCallback = mock()
val uut = MyTestableManager(callback)
uut.perform()
val captor: KArgumentCaptor<String> = com.nhaarman.mockitokotlin2.argumentCaptor<String>()
verify(callback, times(3)).someMethod(captor.capture())
assertTrue(captor.allValues[0] == "first")
assertTrue(captor.allValues[1] == "second")
assertTrue(captor.allValues[2] == "third")
对于Java:
龙目岛过去是简化的。如果愿意,还可以输入构造函数。
构建gradle:
testImplementation "org.mockito:mockito-core:3.6.28"
代码:
// MyCallback.java
public interface MyCallback {
void someMethod(String value);
}
// MyTestableManager.java
public class MyTestableManager {
private MyCallback callback;
public MyTestableManager(MyCallback callback) {
this.callback = callback;
}
public void perform(){
callback.someMethod("first");
callback.someMethod("second");
callback.someMethod("third");
}
}
测试:
import org.mockito.Mockito.times;
import org.mockito.Mockito.verify;
import org.mockito.Mock;
import org.mockito.Captor;
// whatever other imports you need
@Mock
private MyCallback callback;
@Captor
private ArgumentCaptor<String> captor;
private MyTestableManager uut = new MyTestableManager(callback);
// in your test method:
uut.perform()
verify(callback, times(3)).someMethod(captor.capture())
assertTrue(captor.getAllValues().get(0) == "first")
assertTrue(captor.getAllValues().get(1) == "second")
assertTrue(captor.getAllValues().get(2) == "third")
使用适当的VerificationMode:
import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
verify(mockObject, atLeast(2)).someMethod("was called at least twice");
verify(mockObject, times(3)).someMethod("was called exactly three times");