package org.powermock.api.extension.reporter;
import org.powermock.core.reporter.MockingFrameworkReporter;
import org.powermock.reflect.Whitebox;
import static org.powermock.utils.StringJoiner.join;
/**
* The MockingFrameworkReporterFactory which create a new instance of MockingFrameworkReporter
* which is loaded by current context class loader.
*/
@SuppressWarnings("WeakerAccess")
public class MockingFrameworkReporterFactoryImpl extends AbstractMockingFrameworkReporterFactory {
@Override
protected String getImplementerClassName() {
return "org.powermock.api.extension.reporter.MockingFrameworkReporterFactoryImpl$MockitoMockingFrameworkReporter";
}
@SuppressWarnings("unused")
private static class MockitoMockingFrameworkReporter implements MockingFrameworkReporter {
// TODO: mockito2 reporter is internal now
// private org.mockito.internal.exceptions.Reporter mockitoReporter;
// private org.mockito.internal.MockitoCore mockitoCore;
// private org.mockito.internal.exceptions.Reporter getMockitoReporter(Object mockitoCore) {
// return Whitebox.getInternalState(mockitoCore, "reporter");
// }
// private void setMockitoReporter(org.mockito.internal.exceptions.Reporter reporter, org.mockito.internal.MockitoCore mockitoCore) {
// Whitebox.setInternalState(mockitoCore, "reporter", reporter);
// }
@Override
public void enable() {
// mockitoCore = getMockitoCoreForCurrentClassLoader();
// mockitoReporter = getMockitoReporter(mockitoCore);
//
// PowerMockitoReporter powerMockitoReporter = new PowerMockitoReporter();
// setMockitoReporter(powerMockitoReporter, mockitoCore);
}
// private org.mockito.internal.MockitoCore getMockitoCoreForCurrentClassLoader() {
// ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
// try {
// return Whitebox.getInternalState(classLoader.loadClass("org.mockito.Mockito"), "MOCKITO_CORE");
// } catch (ClassNotFoundException e) {
// throw new RuntimeException(e);
// }
// }
@Override
public void disable() {
// setMockitoReporter(mockitoReporter, mockitoCore);
}
}
/**
* PowerMock reported for Mockito, which replace standard mockito message
* to specific message for cases when PowerMock is used.
*/
// private static class PowerMockitoReporter extends org.mockito.internal.exceptions.Reporter {
//
// public void missingMethodInvocation() {
// throw new org.mockito.exceptions.misusing.MissingMethodInvocationException(join(
// "when() requires an argument which has to be 'a method call on a mock'.",
// "For example:",
// " when(mock.getArticles()).thenReturn(articles);",
// "Or 'a static method call on a prepared class`",
// "For example:",
// " @PrepareForTest( { StaticService.class }) ",
// " TestClass{",
// " public void testMethod(){",
// " PowerMockito.mockStatic(StaticService.class);",
// " when(StaticService.say()).thenReturn(expected);",
// " }",
// " }",
// "",
// "Also, this error might show up because:",
// "1. inside when() you don't call method on mock but on some other object.",
// "2. inside when() you don't call static method, but class has not been prepared.",
// ""
// ));
// }
//
// }
}