Mockito为什么不能mock静态方法

因为Mockito使用继承的方式实现mock的,用CGLIB生成mock对象代替真实的对象进行执行,为了mock实例的方法,你可以在subclass中覆盖它,而static方法是不能被子类覆盖的,所以Mockito不能mock静态方法。


但PowerMock可以mock静态方法,因为它直接在bytecode上工作,类似这样:

import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.testng.PowerMockTestCase;
import org.testng.Assert;
import org.testng.annotations.Test;


@PrepareForTest(AbstractAnimal.class)
public class AbstractAnimalTest extends PowerMockTestCase {


    @Test
    public void shouldGetMockedHello() {
        PowerMockito.mockStatic(AbstractAnimal.class);
        PowerMockito.when(AbstractAnimal.getHello()).thenReturn("Hello mocked animal world!");


        String greetings = AbstractAnimal.getHello();
        Assert.assertTrue(greetings.equals("Hello mocked animal world!"));
    }
}


原文:http://blog.csdn.net/hongchangfirst/article/details/46453677

作者:hongchangfirst

hongchangfirst的主页:http://blog.csdn.net/hongchangfirst


你可能感兴趣的:(java,static,mock,自动化测试,powermockito)