Иметь реализацию класса, где требуется покрытие для кода. Но каким-то образом, используя 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
не рассматривается.
Если кто-то может помочь показать правильное направление, чего не хватает, или приблизиться к линии, будет большой помощью