What is the strategy for bullying static registrars in a java service using mockito

I see that the registrars were mocked using Powermock or some kind of overridden constructor that accepts the registrar.

Being a logger used throughout the code, is this not an easy way to use only mockito? Some ways to ignore or mock a call - I don’t want to check any message, I just want to avoid the Null Pointer exception

I am new to mocking frameworks, so I am interested in using Jmockit instead of mixing and matching two libraries. The only reason to avoid jomockit so far is simply too powerful and could easily be misused.

+6
source share
1 answer

I use log checking in cases where I consider it very important to register at a certain level. Here's how I do it using Mockito:

Utility class

public final class LoggingTestUtil { private LoggingTestUtil() { } public static void setupLoggingMock(Logger logger, Appender<ILoggingEvent> appender) { logger = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); when(appender.getName()).thenReturn("MOCK"); logger.addAppender(appender); } public static void verifyLogAppended(Appender<ILoggingEvent> appender, final String loggedString) { verify(appender).doAppend(argThat(new ArgumentMatcher<LoggingEvent>() { @Override public boolean matches(final Object argument) { return ((LoggingEvent) argument).getMessage().contains(loggedString); } })); } public static void verifyLogAppendedAtLevel(Appender<ILoggingEvent> appender, final Level level) { verify(appender).doAppend(argThat(new ArgumentMatcher<LoggingEvent>() { @Override public boolean matches(final Object argument) { return ((LoggingEvent) argument).getLevel().equals(level); } })); } public static void verifyLogAppendedAtLevel(Appender<ILoggingEvent> appender, final Level level, final String loggedString) { verify(appender).doAppend(argThat(new ArgumentMatcher<LoggingEvent>() { @Override public boolean matches(final Object argument) { LoggingEvent event = (LoggingEvent) argument; return event.getLevel().equals(level) && event.getMessage().contains(loggedString); } })); } } 

In test class

 private static Logger root; @Mock private static Appender<ILoggingEvent> mockAppender; // used to test that logging occurs @Test public final void testSomething(){ LoggingTestUtil.setupLoggingMocks(root, mockAppender); underTest.doSomethingBad(); LoggingTestUtil.verifyLogAppendedAtLevel(mockAppender, Level.ERROR, "bad thing"); } 
+4
source

Source: https://habr.com/ru/post/956175/


All Articles