我必须测试类内的方法。但类本身有一些内部属性和方法是继承和保护的。
事实上,我拥有的是:
public class MyActionTest {
@Test
public void goToSearchBaseTest() {
MyAction myAction = new MyAction();
myAction.search();
assert (true);
}
}
然后
public class MyAction extends BaseAction{
...
public ActionForward search(){
if(this.getLog().isDebugEnabled()) {
this.getLog().debug("init --> search()");
}
}
}
最后
public class BaseAction{
...
protected Log log;
...
public ActionForward execute( ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response )
throws Exception {
...
log = LogFactory.getLog( this.getClass() );
...
}
因此,我的小测试在第一行中断:尝试访问记录器,但我无法访问它(也不能放置模拟记录器),因为它是在父类中创建的,我无法修改它。
我常用的 JUnit 和 Mockito 技巧还不够,而且我对 powermock 知之甚少
有人可以帮我解决这个问题吗?
最佳答案
尝试一下
@RunWith(PowerMockRunner.class)
@PrepareForTest(LogFactory.class)
public class MyActionTest {
@InjectMocks
MyAction myAction ;
@Mock
Log log
public void setUp() throws Exception {
PowerMockito.mockStatic(LogFactory.class);
PowerMockito.when(LogFactory.getLog(any(BaseAction.class))).thenReturn(log);
@Test
public void goToSearchBaseTest() {
myAction.search();
assert (true);
}
}
关于java - JUnit、Mockito 和 Powermock 访问 protected 本地方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45862763/