Как проверить метод внутреннего класса по умолчанию и охватить строку с помощью JMockit - PullRequest
0 голосов
/ 22 апреля 2020

Иметь реализацию класса, где требуется покрытие для кода. Но каким-то образом, используя jMockit, я не могу его получить.

// Реальный класс

public class OauthPermalienFilterInterceptor extends PermalienInterceptor {

    final class PreResultListenerImplementation implements PreResultListener {
        @Override
        public void beforeResult(ActionInvocation invocation, String resultCode) {
            // AFTER ActionSupport.execute() but BEFORE StrutsResultSupport.doExecute
            HttpServletRequest request = ServletActionContext.getRequest();
            if (!Action.INPUT.equals(resultCode) && !("POST".equals(request.getMethod())) && saveLink) {
                LOGGER.debug("**** saving the URL");
                String uri = request.getRequestURI();
                if (request.getQueryString() != null) {
                    uri = uri.concat("?").concat(request.getQueryString());
                }
                LOGGER.debug("URL == {}", uri);
                Map<String, Object> sessionParameter = invocation.getInvocationContext().getSession();
                sessionParameter.put("PERMALIEN_CURRENT_URL", uri);
            }
        }
    }

    /**
     * serial version id
     */
    private static final long serialVersionUID = 7432629457094609721L;

    /** The Constant LOGGER. */
    private static final Logger LOGGER = LoggerFactory.getLogger(OauthPermalienFilterInterceptor.class);

    /** permalien url */
    private Boolean saveLink;

    /**
     * {@inheritDoc}
     * 
     * @see intercept(com.opensymphony.xwork2.ActionInvocation)
     */
    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        LOGGER.debug("**** intercept method of permalienInterceptor");
        invocation.addPreResultListener(new PreResultListenerImplementation());
        return invocation.invoke();
    }

    /**
     * Setter saveLink
     *
     * @param saveLink saveLink
     */
    @Override
    public void setSaveLink(Boolean saveLink) {
        this.saveLink = saveLink;
    }

}

Тестовый класс

public class OauthPermalienFilterInterceptorTest {

    @Tested
    private OauthPermalienFilterInterceptor sut;

    /**
     * Test intercept action invocation another pattern.
     *
     * @param invocation       the invocation
     * @param superInterceptor the super interceptor
     * @throws Exception the exception
     */
    @Test
    public void testInterceptActionInvocationAnotherPattern(@Mocked ActionInvocation invocation, @Mocked PreResultListener listner,
            @Mocked HttpServletRequest request) throws Exception {

        final String expectedString = "/korCommonsWeb/ko1-demos/w20DemoGrid";
        mockLogger();

        new Expectations() {
            {
                invocation.invoke();
                result = "/korCommonsWeb/ko1-demos/w20DemoGrid";
            }
        };

        String url = sut.intercept(invocation);
        assertEquals(expectedString, url);

        new Verifications() {
            {
                PreResultListenerImplementation prl;
                ActionInvocation inv;
                String s;
                invocation.addPreResultListener(prl = withCapture());
                times = 1;
                assertNotNull(prl);

            }
        };
    }

    /**
     * Mock logger.
     */
    private void mockLogger() {

        new MockUp<Logger>() {
            @Mock
            public boolean isDebugEnabled() {
                return true;
            }
        };
    }
}

С реализацией тест проходит, но ни один строки кода в методе innerclass beforeResult не рассматривается.

Если кто-то может помочь показать правильное направление, чего не хватает, или приблизиться к линии, будет большой помощью

...