org.mockito.internal.junit.VerificationCollectorImpl Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of securemock Show documentation
Show all versions of securemock Show documentation
Libraries for Elasticsearch
The newest version!
/*
* Copyright (c) 2016 Mockito contributors
* This program is made available under the terms of the MIT License.
*/
package org.mockito.internal.junit;
import static org.mockito.internal.progress.ThreadSafeMockingProgress.mockingProgress;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
import org.mockito.exceptions.base.MockitoAssertionError;
import org.mockito.internal.progress.MockingProgressImpl;
import org.mockito.internal.verification.api.VerificationData;
import org.mockito.junit.VerificationCollector;
import org.mockito.verification.VerificationMode;
import org.mockito.verification.VerificationStrategy;
/**
* Mockito implementation of VerificationCollector.
*/
public class VerificationCollectorImpl implements VerificationCollector {
private StringBuilder builder;
private int numberOfFailures;
public VerificationCollectorImpl() {
this.resetBuilder();
}
public Statement apply(final Statement base, final Description description) {
return new Statement() {
@Override
public void evaluate() throws Throwable {
try {
VerificationCollectorImpl.this.assertLazily();
base.evaluate();
VerificationCollectorImpl.this.collectAndReport();
} finally {
// If base.evaluate() throws an error, we must explicitly reset the VerificationStrategy
// to prevent subsequent tests to be assert lazily
mockingProgress().setVerificationStrategy(MockingProgressImpl.getDefaultVerificationStrategy());
}
}
};
}
public void collectAndReport() throws MockitoAssertionError {
mockingProgress().setVerificationStrategy(MockingProgressImpl.getDefaultVerificationStrategy());
if (this.numberOfFailures > 0) {
String error = this.builder.toString();
this.resetBuilder();
throw new MockitoAssertionError(error);
}
}
public VerificationCollector assertLazily() {
mockingProgress().setVerificationStrategy(new VerificationStrategy() {
public VerificationMode maybeVerifyLazily(VerificationMode mode) {
return new VerificationWrapper(mode);
}
});
return this;
}
private void resetBuilder() {
this.builder = new StringBuilder()
.append("There were multiple verification failures:");
this.numberOfFailures = 0;
}
private void append(String message) {
this.numberOfFailures++;
this.builder.append('\n')
.append(this.numberOfFailures).append(". ")
.append(message.substring(1, message.length()));
}
private class VerificationWrapper implements VerificationMode {
private final VerificationMode delegate;
private VerificationWrapper(VerificationMode delegate) {
this.delegate = delegate;
}
public void verify(VerificationData data) {
try {
this.delegate.verify(data);
} catch (MockitoAssertionError error) {
VerificationCollectorImpl.this.append(error.getMessage());
}
}
public VerificationMode description(String description) {
throw new IllegalStateException("Should not fail in this mode");
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy