java - JUnit、Mockito 和 Powermock 访问 protected 本地方法

标签 java junit mockito powermock powermockito

我必须测试类内的方法。但类本身有一些内部属性和方法是继承和保护的。

事实上,我拥有的是:

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/

相关文章:

java - 如何修复tomcat org.apache.tomcat.util.http.parser.HttpParser.<clinit> Character [[] is not allowed and will continue to reject

java - 在RecyclerView中实现 "add to favourite"机制

java - 避免多个 Not null 语句

java - 使用 Mockito 测试 Mono 和 Flux

java - 为什么当我返回模拟值时会收到 NullPointerException?

java - 对象没有被 mock 。抛出空指针异常

java - 同时杀死两个进程

java - Kafka Avro 序列化器和反序列化器异常。 Avro 支持的类型

java - 为什么 ErrorCollector 在声明的时候要求赋值?

java - 如何告诉 Hibernate 在运行 JUnit 测试时不要存储数据?