首頁>Club>
15
回覆列表
  • 1 # 使用者9898301904577

    因為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 {@Testpublic 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!"));}}

  • 2 # 藍風24

    因為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 {

  • 中秋節和大豐收的關聯?
  • 如何評價泰國盛大的國王加冕典禮?