blob: 4a32193fee8117ba8f2255b9ac8c6af5da4ce5b4 [file] [log] [blame]
package org.mockito.internal.framework;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.mockito.MockitoSession;
import org.mockito.exceptions.misusing.RedundantListenerException;
import org.mockito.internal.exceptions.Reporter;
import org.mockito.internal.junit.TestFinishedEvent;
import org.mockito.internal.junit.UniversalTestListener;
import org.mockito.internal.util.MockitoLogger;
import org.mockito.quality.Strictness;
public class DefaultMockitoSession implements MockitoSession {
private final Object testClassInstance;
private final UniversalTestListener listener;
public DefaultMockitoSession(Object testClassInstance, Strictness strictness, MockitoLogger logger) {
this.testClassInstance = testClassInstance;
listener = new UniversalTestListener(strictness, logger);
try {
//So that the listener can capture mock creation events
Mockito.framework().addListener(listener);
} catch (RedundantListenerException e) {
Reporter.unfinishedMockingSession();
}
MockitoAnnotations.initMocks(testClassInstance);
}
public void finishMocking() {
//Cleaning up the state, we no longer need the listener hooked up
//The listener implements MockCreationListener and at this point
//we no longer need to listen on mock creation events. We are wrapping up the session
Mockito.framework().removeListener(listener);
//Emit test finished event so that validation such as strict stubbing can take place
listener.testFinished(new TestFinishedEvent() {
public Throwable getFailure() {
return null;
}
public Object getTestClassInstance() {
return testClassInstance;
}
public String getTestMethodName() {
return null;
}
});
//Finally, validate user's misuse of Mockito framework.
Mockito.validateMockitoUsage();
}
}